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

回到顶部