Apache Commons FileUpload Stream API在Spring 5中无法运行

时间:2018-06-18 21:06:50

标签: java spring spring-boot apache-commons-fileupload

我正在使用Apache Commons FileUpload Stream API,它与spring-boot-starter-parent 1.5.14.RELEASE完美配合:

public ResponseEntity<String> uploadFile(HttpServletRequest request) throws Exception
{    
    if (!ServletFileUpload.isMultipartContent(request))
    {
        return responseService.badRequest(request, "file", "Request is not multipart, please 'multipart/form-data' enctype for your form.");
    }

    ServletFileUpload upload = new ServletFileUpload();
    FileItemIterator iter = upload.getItemIterator(request);

    while (iter.hasNext())
    {
         FileItemStream item = iter.next();
         if (!item.isFormField()) 
         {
            save(item.openStream(), item.getName());

            return responseService.success(request);
         }
    }

    return responseService.badRequest(request, "file", "Must contain a file stream");
}

我的属性文件中也设置了spring.http.multipart.enabled = false。

但是,当我升级到2.0.3.RELEASE时,FileItemIterator的hasNext()只返回false。

有没有人能够使用Spring 5 / Springboot 2.0.x?

1 个答案:

答案 0 :(得分:1)

在您的 application.properties 文件集中:

spring.servlet.multipart.enabled=false

如果您尚未设置此项,则会发现它似乎立即关闭了流。

如果您遵循的是较早的演示,则可以将Spring Boot 1.x值设置为spring.http.multipart.enabled=false。 Boot 2.0已弃用该功能

话虽这么说,现在是指出两个特定资源的好时机:

1。)Spring参考文档
Common Application Properties Spring 1.5.15

Common Application Properties Spring 2.0.X

这些文档显示了您可能不知道的通用应用程序属性之间的更改。利用IntelliJ之类的IDE,它会通过带有红色下划线的带有信息提示的花样来提示您(如果您恰巧利用了它)。

2。)Spring Boot迁移指南
签出Spring Boot 2.0 Migration Guide

它会定期进行更新,并指出这些麻烦类型,例如用于迁移application.properties的工具,默认值的更改(重要的)以及一些已更改的基础。

如果您要迁移应用程序,或者只是想了解更多有关应用程序的行为方式以及某些原因,我强烈建议您这样做。