Tomcat 和解析 MultipartFile Upload 服务的问题

问题描述 投票:0回答:2

我有一个带有端点的应用程序和一个与其一起运行的 tomcat 服务器。我可以使用文件到达邮递员上的端点,并将其上传到我的服务器上的 Excel 文件中。

问题是为了让它工作,我必须在我的tomcat的context.xml中添加allowCasualMultipartParsing =“true”,我不想在我的本地tomcat上添加此修复。

我需要一个修复程序,尽管它运行在 tomcat 服务器上,但它仍然可以工作。因此,如果有人添加一个新的 tomcat,他们就不会遇到这个问题。例如在 tomcat 9.0.6 上

很难演示这个问题,因为这是由于在独立的 tomcat 上运行应用程序造成的。当我在没有独立 tomcat 9.0.38 的情况下运行它时它可以工作。

上传文件代码

@Controller
@RequestMapping("/ListCtrl")
public class listController {
    
    @RequestMapping(method = {RequestMethod.POST}, value = "/list")
    @Consumes (MediaType.MULTIPART_FORM_DATA)
    @Produces (MediaType.TEXT_XML)
    @ResponseBody public Map<String, Object> uploadFile(
        @FormDataParam("file") InputStream uploadedInputStream,
        @FormDataParam("file") MultipartFile file,
        @RequestParam("listName") String listName,
        @RequestParam Integer
        listid){
        Map<String, Object> resultMap =  null;
        resultMap = new HashMap<>();
        resultMap.put("status", "successful");
        resultMap.put("file", file.getName());
        System.out.println(file.getOriginalFilename());
    return resultMap;
    }   

我在无法正常工作的项目中遇到的错误是 HTTP 状态 500 - 无法解析多部分 servlet 请求;嵌套异常是java. lang.IllegalStateException:无法处理部件,因为未提供多部件配置

java spring spring-boot multipartform-data tomcat9
2个回答
2
投票

我找到了解决方案。我以前见过它,但不完全理解,所以我想在这里详细说明,以防其他人看到它。尽管 Tomcat 正在运行,但该解决方案仍然有效。 您需要创建一个 META-INF 文件夹。对于我来说,我在部署的资源文件夹下创建并添加了 context.xml。将

allowCasualMultipartParsing="true"
放入
Context
标签后。 Web应用程序/部署的资源/META-INF/context.xml。

<Context allowCasualMultipartParsing="true"/>

Spark Java:无法处理部件,因为未提供多部件配置


0
投票

提供配置就足够了。正如 Spring 文档中提到的,Spring 中包含两个具体实现。

  1. CommonsMultipartResolver 用于 Apache Commons FileUpload 和
  2. 用于 Servlet 3.0+ 部分 API 的 StandardServletMultipartResolver
为了更好的灵活性和可配置性,我选择使用 CommonsMultipartResolver。它的优点之一是提供

maxUploadSizemaxInMemorySizedefaultEncoding 设置作为 bean 属性。但是,您必须将其导入为:

<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency>
在你的代码中:

@Configuration public class WebConfig { private int maxUploadSizeInMb = 2 * 1024 * 1024; // 2 MB ... ... @Bean("multipartResolver") public CommonsMultipartResolver multipartResolver() { CommonsMultipartResolver cmr = new CommonsMultipartResolver(); cmr.setMaxUploadSize(maxUploadSizeInMb * 2); //sum size of all files/parts of a file. Since, a file may be partitioned cmr.setMaxUploadSizePerFile(maxUploadSizeInMb);//maximum file size of each file return cmr; } }
    
© www.soinside.com 2019 - 2024. All rights reserved.