文件上传就是把用户资源保存到服务器,供用户下次使用
使用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的。