【问题标题】:Spring Boot, Jetty: Multipart upload - make Spring/Jetty accept body parts with missing "filename" attribute?Spring Boot,Jetty:分段上传 - 让 Spring/Jetty 接受缺少“文件名”属性的正文部分?
【发布时间】:2018-04-05 05:00:34
【问题描述】:

如何让 Spring(或 Jetty)接受/解析正文部分错过 Content-Disposition 中的filename 属性的分段上传?

除了缺少 filename 属性外,Multipart 消息还可以,并且它也可以与旧版本的 Jetty/Spring 一起使用。

我需要设置什么才能让 Jetty/Spring 再次更容错?

附: 在这里,我发现了一个类似但不同的问题(name 属性缺失)。然而,虽然name 似乎是识别身体部位的重要属性,但您不一定需要原始客户端文件名:Spring POST multipart/form-data Request empty body, getParts always empty

【问题讨论】:

  • 目前的解决方案:重写 Jetty 的 StandardMultipartHttpServletRequest 类并重新实现其 parseRequest 方法,以便在没有文件名时不跳过正文部分。还有其他更好的建议吗?

标签: spring-boot jetty multipart


【解决方案1】:

正如评论中已经提到的:

Spring (4.3.8.RELEASE) 无条件跳过没有文件名的多部分文件,即没有设置使其更具容错性。因此,唯一的解决方案是覆盖 Spring 的 StandardMultipartHttpServletRequest 类并修改相关方法:parseRequest

添加的代码行:

if (filename == null && "file".equalsIgnoreCase(part.getName()) && MediaType.APPLICATION_OCTET_STREAM.equalsIgnoreCase(part.getContentType())) {
    filename = DEFAULT_FILENAME;
}

是的,多部分正文部分的名称不一定必须是“文件”,但这是上传文件时我的代码必须使用的客户端应用程序使用的名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-17
    • 2014-10-31
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 2015-03-26
    • 2014-09-13
    • 2014-10-09
    相关资源
    最近更新 更多