Spring学习日记(三) 上传文件

一:使用CommonsMultipartResolver

需要在配置文件里面配置
@Bean
	public MultipartResolver multipartResolver() throws IOException{
		
		CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
		//这个地址  会在 workspace 上级目录下 自动建立: 意思就是这个目录会和workspace同一级别
		//比如 我的workspace是D:\\javaEEDevSpace
		//那这tmp的目录就是:D:\\tmp\\spittr\\uploads
		multipartResolver.setUploadTempDir(new FileSystemResource("/tmp/spittr/uploads"));
		multipartResolver.setMaxInMemorySize(0);
		multipartResolver.setMaxUploadSize(30*1024*1024);
		return multipartResolver;
	}

除了上面的配置之外还需要2个jar包,commons-io和commons-fileupload


二:使用StandardServletMultipartResolver

使用 StandardServletMultipartResolver的需要在servelt3.0及以上的环境才行,并且需要重写AbstractAnnotationConfigDispatcherServletInitializer里面的 customizeRegistration()方法,代码如下:
@Override
	protected void customizeRegistration(Dynamic registration) {
		// TODO Auto-generated method stub
		//第一是临时接收上传文件的地址
		//第二个是单个文件的最大值
		//第三个是一次请求中的最大值
		//只有在3.0以上包括3.0的servlet才能用
		//目录必须先存在,不然会报错
		File file = new File("d:/tmp/spittr/uploads");
		if(!file.exists()){
			file.mkdirs();
		}
		MultipartConfigElement multipartConfigElement = new MultipartConfigElement(file.getAbsolutePath(), 2*1024*1024, 4*1024*1024, 0);
		registration.setMultipartConfig(multipartConfigElement);
		super.customizeRegistration(registration);
	}
临时 目录一定要存在在行,不然会报错,而使用CommonsMultipartResolver的话却不会,CommonsMultipartResolver会自动创建

处理上传文件的代码如下:
@RequestMapping(value = "/register",method=RequestMethod.POST)
	public String processRegister(@RequestPart("profilePicture") MultipartFile profilePicture, @ModelAttribute @Valid Spitter spitter,BindingResult errors,Model model) throws IllegalStateException, IOException{
		//request.setCharacterEncoding("GBK");
		if(errors.hasErrors()){
			model.addAttribute("spitter", spitter);
			System.out.println("hasErrors...");
			return "register";
		}
		System.out.println(profilePicture.getContentType());
		System.out.println(profilePicture.getName());
		System.out.println(profilePicture.getOriginalFilename());
		System.out.println(profilePicture.getSize());
		File dir  = new File("D:\\javaEEDev\\upload");
		if(!dir.exists()){
			dir.mkdirs();
		}
		
		File file = new File(dir, profilePicture.getOriginalFilename());
		profilePicture.transferTo(file);
		System.out.println(spitter.toString());
		spitterRepository.save(spitter);
		return "redirect:/spitter/"+URLEncoder.encode(spitter.getUsername(), "UTF-8");
		//return "redirect:/spitter/"+spitter.getUsername();
	}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值