![](/img/trans.png)
[英]FileNotFoundException in spring boot jar but the file is present
[英]FileNotFoundException while uploading multi part file - Spring boot
我正在嘗試通過 Spring Boot 應用程序的分段上傳來上傳文件。 上傳文件時,jetty 拋出 FileNotFound 異常。
以下是模型結構:
private String identifier;
private MultipartFile file;
以下是配置:
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setMaxFileSize("500MB");
factory.setMaxRequestSize("500MB");
return factory.createMultipartConfig();
}
@Bean
public CommonsMultipartResolver multipartResolver() {
return new CommonsMultipartResolver();
}
以下調用引發異常:
model.getFile().getInputStream()
下面是堆棧跟蹤:
java.io.FileNotFoundException: /tmp/MultiPart7953817223010764667 (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:146)
at org.eclipse.jetty.util.MultiPartInputStream$MultiPart.getInputStream(MultiPartInputStream.java:218)
at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile.getInputStream(StandardMultipartHttpServletRequest.java:253)
//user classes
此問題是間歇性的,我無法通過連續嘗試重新生成它。 同一文件第二次成功上傳。
知道我在這里做錯了什么嗎?
提前致謝
可能有多種原因,sprintboot 默認情況下將 Multipart 文件存儲在某個系統目錄中,一旦您使用 file.getInputStream() 消耗文件,再次執行它會導致它發生。 由於一旦讀取 inputstream,spring 會自動清除保存的文件,從而導致 file not found 異常。 另一個原因是在處理多部分文件時使用 @Async。
我找到了一個非常簡單的方法。 我使用了TaskExecutor (一種多線程方法)。 注意到來自 tomcat 服務器的臨時文件正在被刪除。 因此,我創建了一個 DTO 並從List<MultipartFile>
提取了我需要的重要數據:-
List<FileDataDTO> files = new ArrayList<>();
attachments.forEach(attach -> {
try
{
FileDataDTO file = new FileDataDTO();
file.setFileData(attach.getBytes());
file.setOriginalName(attach.getOriginalFilename());
file.setContentType(attach.getContentType());
files.add(file);
}
catch (Exception e)
{
logger.error(Constant.EXCEPTION, e);
}
});
然后調用我的 Task Executor 方法。 然后數據按預期反映在新線程中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.