基于SpringMVC的文件上传

文件上传就是把用户资源保存到服务器,供用户下次使用

使用SpringMVC上传文件挺容易

1.加入需要的文件上传的jar包(commons-fileupload-1.3.jar和commons-io-2.0.jar)只要版本不是特别低都可以

2.配置Spring-MVC.xml(具体其他参数自行google,这里只是限制了上传文件的大小10M)

	<!-- 上传文件拦截,设置最大上传文件大小 10M=10*1024*1024(B)=10485760 bytes -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize" value="10485760" />
	</bean>
3.在控制层(controller)处理文件上传请求

	/*文件表单*/
	@RequestMapping(value="uploadpicture",produces = "text/html;charset=UTF-8")
	@ResponseBody
	public String updatePic(@RequestParam("userpicture") MultipartFile[] files,User user){
		//1.调用服务层保存用户的图片到服务器
		//获取用户id:用来创建一个文件夹来保存用户文件
		String id=user.getUid()+"";
		//文件路径
		String basePath=session.getServletContext().getRealPath("/")+"upload/"+id+"/";//+file.getOriginalFilename();
		if(userService.saveFiles(files, basePath)){
			//2.把图片保存后的路径更新到用户的表
			user.setUpicture("");
			if(userService.updateUserBySelected(user)>0){
				return "success";
			}
		}
		return "{'fail':'文件保存出错'}";
解释:uploadpicture是请求名称,produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;(我这里可以不写,但是没影响),ResponseBody指定响应的类型为xml或json.

这里使用MultipartFile[] files数组来接受上传的多文件,然后调用服务层来处理文件的保存。

	public boolean saveFiles(MultipartFile[] files,String path) {
		if(files!=null && files.length>0){//文件不空切大于0个
			for(MultipartFile file:files){//循环添加文件名称并且保存文件到指定的路径
				boolean flag=saveFile(file,path+"/"+file.getOriginalFilename());
				if(!flag){//文件上传出错
					return false;
				}
			}
			return true;
		}
		return false;//files为空的
	}
	//保存单个文件到指定路径
	public boolean saveFile(MultipartFile file,String path){
		if(!file.isEmpty()){//如果文件不空
			try{
				File f=new File(path);
				if(!f.exists()){//文件目录不存在
					f.mkdirs();
				}
				file.transferTo(new File(path));
				System.out.println("保存路径为:"+path);
				return true;
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		return false;
	}

具体有些细节,出现问题的时候就要找到问题。毕竟没有程序是零Bug的。





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值