java - 客户端发送的请求在语法上不正确,multipart/form-data 和 content-length 大于 9375 字节

标签 java spring tomcat jackson

我在尝试将文件上传到 spring/jackson web 服务时遇到问题。我的服务描述如下:

@POST
@Path("/foo/{someID}")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
        @FormDataParam("file") InputStream uploadedInputStream,
        @FormDataParam("file") com.sun.jersey.core.header.FormDataContentDisposition fileDetail,
        @PathParam("someID") Long supplierID)
{
}

我收到的错误是:

客户端发送的请求在语法上不正确。

以下是我从 Chrome 中提取的 header ,该 header 无法正常工作。

Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:879585
Content-Type:multipart/form-data; boundary=----WebKitFormBoundary1VA1IfWOdVmZqk49
Cookie:SPRING_SECURITY_REMEMBER_ME_COOKIE=COOKIE_HERE
Host:localhost:8081
Origin:chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31
Request Payload
------WebKitFormBoundary1VA1IfWOdVmZqk49
Content-Disposition: form-data; name="file"; filename="Chrysanthemum.jpg"
Content-Type: image/jpeg


------WebKitFormBoundary1VA1IfWOdVmZqk49--

发现不是内容类型,而是内容大小。在 9377 字节时它会损坏,但在 9375 字节时它会工作。不幸的是,这似乎与 Tomcat、Spring 或 Jersey 中记录的任何限制(默认或其他)不一致,因此我对导致此问题的原因感到困惑。

最佳答案

所以我最终发现了这是什么。问题是我们超出了 tomcat 在内存中为此传输文件分配的空间量。然后它尝试将文件写入临时空间,但临时空间阻止了 tomcat 应用程序的写入。一旦解决了这个问题,一切就开始按预期工作。因此,如果您遇到类似的情况,请检查 tomcat 写入临时文件的位置(在我的示例中为 C:\Program Files\Apache Software Foundation\Tomcat 7.0\temp),并确保它具有写入此目录的正确访问权限。

关于java - 客户端发送的请求在语法上不正确,multipart/form-data 和 content-length 大于 9375 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16863137/

相关文章:

java - Maven 上发布新 Podio Java API

java - 如何在 main 中使用整数值创建堆栈而不固定大小

java - 我对配置的假设是否正确?

json - 在 DIspatcherServlet 中找不到映射

hibernate - Hibernate 和 Spring 的配置问题

java - 与 Thread.sleep 相比,new Thread().sleep 在 CPU 和内存利用率方面有多差?

java - 如何连接到在 GCP 虚拟机实例上运行的 Grakn 服务器

Spring MVC REST 默认生成 XML

eclipse - Tomcat 没有在 eclipse 上启动

tomcat - Windows 服务器上启动 tomcat 服务的访问权限被拒绝