HttpServletRequest如何重复读取上传文件(MultipartFile)?
在HandlerInterceptor的preHandle方法通过以下代码读取文件:
String hotBackupTempFile = "/home/file"; List<File> uploadFile = new ArrayList<>();
if (ServletFileUpload.isMultipartContent(request)){
MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
MultiValueMap<String, MultipartFile> fileMap = multipartRequest.getMultiFileMap();
for (Map.Entry<String, List<MultipartFile>> entry : fileMap.entrySet()) {
for (MultipartFile m : entry.getValue()) {
String fileName = m.getOriginalFilename();
File tempFileFolder = new File(hotBackupTempFile);
if (!tempFileFolder.exists()) tempFileFolder.mkdirs();
File upload = new File(hotBackupTempFile + "/" + fileName);
m.transferTo(upload);
uploadFile.add(upload);
}
}
}
然后在controller就读不到文件了:
@ResponseBody@RequestMapping("/add")
public JSON addFile(@RequestParam(value = "file",required = false) MultipartFile[] multipartFile) {}
如何才能实现重读读取文件?
回答:
很简单,不要使用 transferTo
。
用 MultipartFile.getBytes
。
FileUtil.writeBytes(file.getBytes(), "test1");FileUtil.writeBytes(file.getBytes(), "test2");
回答:
tomcat接收MultipartHttpServletRequest请求中的文件时,会将文件先放到临时目录中,(打断点可以看到MultipartFile的存储路径)
,而MultipartFile的transferTo方法会将临时目录中的文件移除
,所以如果还要在后续拿到文件的话,不能使用该方法。
解决方法
:通过MultipartFile的getInputStream方法拿到文件流后,写入到目标文件即可
以上是 HttpServletRequest如何重复读取上传文件(MultipartFile)? 的全部内容, 来源链接: utcz.com/p/944661.html