我在尝试将文件上传到 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/