上传文件用MultipartFile对象接收文件,主线程直接返回,异步线程处理文件,当主线程返回数据时异步线程还未读取文件的话之后文件就会读不到,报错“File has been moved - cannot be read again”,因为接口已经返回了,数据流也就清空了,这时候就需要我们在异步线程开启之前创建临时文件,异步线程读取临时文件,就不会读不到数据了。
String originalFilename = multipartFile.getOriginalFilename();
String[] filename = originalFilename.split("\\.");
if(filename[0].length()<3){
file = File.createTempFile("temp"+filename[0], "." + filename[1]);
}else {
file = File.createTempFile(filename[0], "." + filename[1]);
}
//将上传的文件流给到临时文件
multipartFile.transferTo(file);
临时文件处理完成后记得删除文件哈
file.delete();
这样只要不删除临时文件,那么文件就一直能读到

在Java中使用MultipartFile接收文件并进行异步处理时,若主线程先返回,会导致文件流被关闭,异步线程无法读取。为解决此问题,可以在主线程中创建临时文件,然后将文件流转移到临时文件,保证异步线程可以安全读取。操作完成后,别忘了删除临时文件。
720





