@Controller
@RequestMapping("/file")
public class fileUploadController {
@RequestMapping("/toFile")
//跳转到文件上传的JSP页面
public String toFileUpload() {
return "fileUpload";
}
@RequestMapping("/fileUpload")
public String fileUpload(@RequestParam("file") CommonsMultipartFile file,
HttpServletRequest request, ModelMap model) {
//获得原始文件名
String fileName = file.getOriginalFilename();
System.out.println("fileName:"+ fileName);
//新文件名
String newFileName = UUID.randomUUID()+fileName;
//上传到什么地方
String path = "d:/upload/";
File f = new File(path);
if(!f.exists())f.mkdirs();
if(!file.isEmpty()){
try {
FileOutputStream fos = new FileOutputStream(path+newFileName);
InputStream in = file.getInputStream();
int b = 0;
while((b=in.read())!=-1){
fos.write(b);
}
fos.close();
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println("imgurl:"+ path+newFileName);
//保存文件地址,用于JSP页面回显
model.addAttribute("fileUrl", path+newFileName);
return "fileUpload";
} }
Spring通过对Servlet API的HttpServletRequest接口精选扩展,使其能够很好的处理文件上传。扩展后的接口名为:
org.springframework.web.multipart.MultipartHttpServletRequest
MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest)(request);
然后就能正常读取参数: mRequest.getParameter("xxx");
我们再在fileUploadController里新增一个fileUpload2的方法:
@RequestMapping("/fileUpload2")
public String fileUpload2(HttpServletRequest request,HttpServletResponse response) throws Exception{
CommonsMultipartResolver cmr = new CommonsMultipartResolver(request.getServletContext());
if(cmr.isMultipart(request)){
MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest)(request);
Iterator<String> files = mRequest.getFileNames();
while(files.hasNext()){
MultipartFile mFile = mRequest.getFile(files.next());
if(mFile != null){
String fileName = UUID.randomUUID()+mFile.getOriginalFilename();
String path = "d:/upload/"+fileName;
File localFile = new File(path);
mFile.transferTo(localFile);
request.setAttribute("fileUrl", path);
}
}
}
return "fileUpload";
} |
|