一般的流程
- 文件去获取路径
- 文件工厂来设置文件的缓存
- ServletFileUpload来读取多个文件的
- 写文件
说明
涉及的对象
DiskFileItemFactory,File,ServletFileUpload,FileItem
对象的作用
DiskFileItemFactory类来处理文件缓存,需要注意设置的是缓存大小与文件路径
对于ServletFileUpload需要设置的是缓存的处理与http请求的解析
对于FileItem需要注意的是上传文件的判断
代码示例
@RequestMapping(value="/uploadTwo",method=RequestMethod.POST)
@ResponseBody
public Object uploadTwo(String currentDir,String type) throws IOException{
JSONObject json = new JSONObject();
try {
// 获得磁盘文件条目工厂
DiskFileItemFactory factory = new DiskFileItemFactory();//
File file = new File(this.getRealPath("/upload/"));
if(!file.exists()){
file.mkdirs();
}
factory.setRepository(file);
// 设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室
factory.setSizeThreshold(1024 * 1024);
// 处理多文件上传
ServletFileUpload upload = new ServletFileUpload(factory);
// 可以上传多个文件
List<FileItem> list = (List<FileItem>) upload.parseRequest(request);
//fileDirService用来处理文件上传
fileDirService.setOperator(type);
for (FileItem item : list) {
if (!item.isFormField()) {
InputStream in = item.getInputStream();
fileDirService.uploadFile(currentDir, in);
json.put("success", true);
json.put("msg", "导入成功!");
return json;
}
}
} catch (Exception e) {
logger.error(e.getCause(),e);
json.put("success", false);
json.put("msg", "导入失败:"+e.getMessage());
}
json.put("success", false);
json.put("msg", "导入失败!");
return json;
}