在 tomcat 中运行的 Spring Boot,所需的请求部分“文件”不存在

Posted

技术标签:

【中文标题】在 tomcat 中运行的 Spring Boot,所需的请求部分“文件”不存在【英文标题】:Spring boot running in tomcat, required request part 'file' is not present 【发布时间】:2021-11-08 08:43:12 【问题描述】:

过去 2 天我一直在阅读堆栈溢出问题的解决方案。我已经尝试了其他人问题的所有答案,但对我没有任何帮助。当我通过 Eclipse 运行 Spring Boot 作为 Spring Boot 应用程序运行 Spring Boot 时,此方法有效,但是当我创建 War 并将其放置在 tomcat 上时,我收到“Required request part 'file' is not present”错误。

这是我用作示例的文章:https://www.baeldung.com/spring-file-upload

错误: org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver:logException(207): Resolved [org.springframework.web.multipart.support.MissingServletRequestPartException: Required request part 'file' is not present]

Chrome 网络表单数据:

内容配置:表单数据;名称=“文件”;文件名="Flow_Results.xlsx" 内容类型:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

文件以传递给网络服务器的形式存在。

Pom.xml

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- Tomcat -->
        <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-tomcat</artifactId>
           <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>

Application.properties

spring.servlet.multipart.enabled=true
spring.servlet.multipart.location=$java.io.tmpdir

Angular 函数发帖。

saveData(file: File, opertatorId: string): Observable<HttpEvent<>> 
    const formData: FormData = new FormData();
    formData.append('file', file, file.name);

    const newRequest = new HttpRequest('POST', 'cliareport/savedatafile/' + opertatorId, formData, 
        reportProgress: true,
        responseType: 'text',
    );

    return this.httpClient.request(newRequest);

Spring 启动控制器

@Bean
public CommonsMultipartResolver multipartResolver() 
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
    multipartResolver.setMaxUploadSize(-1);
    return multipartResolver;


@PostMapping(path="/cliareport/savedatafile/operatorid", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public ResponseEntity<String> saveDataFile(@RequestParam("file") MultipartFile file,
    @PathVariable("operatorid") String operatorid) 

【问题讨论】:

【参考方案1】:

对于遇到此问题的任何人,这是 NIO SSL 连接器与 Ubuntu 20 版本附带的 tomcat 版本的问题。要解决此问题,请升级您的 tomcat 版本。

https://bugs.launchpad.net/ubuntu/+source/tomcat9/+bug/1903851

【讨论】:

以上是关于在 tomcat 中运行的 Spring Boot,所需的请求部分“文件”不存在的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Spring Boot 应用程序(Tomcat 服务器)中运行 localhost

在一个 Tomcat 上运行多个 Spring-boot 应用程序

如何在 Eclipse Tomcat 中运行 Spring Boot 应用程序?

无法使用嵌入式tomcat服务器在spring boot中运行jsp文件

如何在带有嵌入式 tomcat 的 Spring Boot 应用程序中运行 hawt.io

如何创建 Spring Boot 应用程序并在 Tomcat 中将其作为 .war 运行? [复制]