上传多部分文件时出现FileNotFoundException - Spring启动

Dar*_*hta 6 java file-upload multipart spring-boot

我试图通过弹簧启动应用程序的多部分上传来上传文件.在上传文件时,jetty会抛出FileNotFound Exception.

以下是模型结构:

private String identifier;
private MultipartFile file;
Run Code Online (Sandbox Code Playgroud)

以下是配置:

@Bean
public MultipartConfigElement multipartConfigElement() {
    MultipartConfigFactory factory = new MultipartConfigFactory();
    factory.setMaxFileSize("500MB");
    factory.setMaxRequestSize("500MB");
    return factory.createMultipartConfig();
}

@Bean
public CommonsMultipartResolver multipartResolver() {
    return new CommonsMultipartResolver();
}
Run Code Online (Sandbox Code Playgroud)

以下调用抛出异常:

model.getFile().getInputStream()
Run Code Online (Sandbox Code Playgroud)

下面是堆栈跟踪:

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
Run Code Online (Sandbox Code Playgroud)

此问题是间歇性的,我无法通过连续尝试重新生成它.第二次成功上传同一文件.

知道我在这里做错了什么吗?

提前致谢

小智 6

可能有多种原因,sprintboot 默认情况下将 Multipart 文件存储在某个系统目录中,一旦您使用 file.getInputStream() 消耗文件,再次执行它会导致它发生。由于一旦读取 inputstream,spring 会自动清除保存的文件,从而导致 file not found 异常。另一个原因是在处理多部分文件时使用 @Async。