java—tomcat和解析多部分文件上载服务的问题

bkhjykvo  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(371)

我有一个带有端点的应用程序和一个运行它的tomcat服务器。我可以用一个文件在postman上点击一个端点,并将其上传到服务器上的excel文件中。
问题是为了让它工作,我必须在tomcat的context.xml中添加allowcasualmultipartparsing=“true”,我不想在本地tomcat上添加这个补丁。
我需要一个修复,将工作,尽管tomcat服务器上运行。因此,如果有人要添加一个新的tomcat,他们就不会有这个问题。例如在tomcat 9.0.6上
很难证明这个问题,因为这是由于在一个独立的tomcat上运行应用程序造成的。当我在没有独立的tomcat9.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:无法处理部件,因为未提供多部件配置

izkcnapc

izkcnapc1#

如果你提供一个配置就足够了。正如spring文档中提到的,spring中包含两个具体的实现。
用于apache commons文件上载和
Servlet3.0+部分api的standardservletmultipartresolver
为了更好的灵活性和可配置性,我选择使用commonmultipartresolver。它的优点之一是提供了maxuploadsize、maxinmemorysize和defaultencoding设置作为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;

    }
}
wnavrhmk

wnavrhmk2#

我找到了解决办法。我以前见过,但不完全明白,所以我想在这里详细说明,以防其他人看到它。尽管tomcat正在运行,但这个解决方案仍然有效。您需要创建一个meta inf文件夹。对我来说,我在一个已部署的资源文件夹下创建了一个context.xml。在我将allowcasualmultipartparsing=“true”放入上下文标记之后。webapp/deployed resources/meta-inf/context.xml。
spark java:无法处理部件,因为没有提供多部件配置

相关问题