java - Apache Commons FileUpload Stream API 在 Spring 5 中不起作用

标签 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 上使用它?

最佳答案

在您的 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 ,默认值的变化(很重要),以及一些已经发生变化的基础。

如果您正在迁移应用程序或只是想更多地了解您的应用程序将如何表现不同以及其中的一些原因,我强烈建议您使用此方法。

关于java - Apache Commons FileUpload Stream API 在 Spring 5 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50917472/

相关文章:

java - 范围内整数的倍数

java - GoogleMap addPolygon 引发有关空列表的异常

Spring - 使用 "JDBCTemplate": The method "X" refers to the missing type DataAccessException 时出错

java - Spring BasicProcessingFilter 迁移到 Spring Security 4

java - SQS 接收器 - Spring Boot

java - Spring Boot 3.0/Security 6.0 迁移 - SecurityFilterChain 中的 "EL1057E: No bean resolver registered in the context to resolve access to bean..."

spring-boot - 使用多个 Jedis 集群与 Spring Boot 进行缓存

java - 对网络驱动器上不可访问的 File 对象的后续调用 File.listFiles 会产生不同的结果

java - 黑客可以修改 session 变量吗?

java - 在 Acceleo 中包装 java 函数(在 Eclipse 中)