【问题标题】:Getting 500 error (missing ;) from blobstore upload从 blobstore 上传获取 500 错误(缺少;)
【发布时间】:2014-05-22 09:54:22
【问题描述】:

我想跳过将上传 URL 发送到客户端的部分,直接从后端上传到 blobstore。我使用this 发送多部分请求,虽然我得到:

<body><h2>HTTP ERROR 500</h2>
<p>Problem accessing/_ah/upload/ahB0NTIzNjU4OTY1ODk1Njg5ciILEhVfX0Jsb2JVcGxvYWRTZXNzaW9uX18YgICAgICAiAs    M. Reason:
<pre>    Missing ';'</pre></p><h3>Caused by:</h3>    <pre>javax.mail.internet.ParseException: Missing ';'
at javax.mail.internet.ParameterList.&lt;init&gt;(ParameterList.java:135)
at javax.mail.internet.ContentType.&lt;init&gt;(ContentType.java:72)
at javax.mail.internet.MimeMultipart.&lt;init&gt;(MimeMultipart.java:98)
at com.google.apphosting.utils.servlet.MultipartMimeUtils.parseMultipartRequest(MultipartMimeUtils.java:41)
at com.google.appengine.api.blobstore.dev.UploadBlobServlet.handleUpload(UploadBlobServlet.java:173)
at com.google.appengine.api.blobstore.dev.UploadBlobServlet.access$000(UploadBlobServlet.java:71)
at com.google.appengine.api.blobstore.dev.UploadBlobServlet$1.run(UploadBlobServlet.java:117)
at java.security.AccessController.doPrivileged(Native Method)
at com.google.appengine.api.blobstore.dev.UploadBlobServlet.doPost(UploadBlobServlet.java:114)

这是发送的数据:

--__END_OF_PART__
Content-Type: image/bmp
content-transfer-encoding: binary
content-disposition: form-data; name="file"

[binary string here]
--__END_OF_PART__--

这些是标题:

accept-encoding: gzip,
content-type: multipart/form-data; boundary=__END_OF_PART__

这是代码:

BlobstoreService service = BlobstoreServiceFactory.getBlobstoreService();
String url = service.createUploadUrl("/upload");

HttpRequestFactory factory = UrlFetchTransport.getDefaultInstance().createRequestFactory();


MultipartFormContent content = new MultipartFormContent();
content.addPart(new MultipartFormContent.Part(
            "file",
            new InputStreamContent("image/bmp", 
                    new ByteArrayInputStream(Base64.decodeBase64(data)))));

content.writeTo(System.out);

HttpRequest request = factory.buildPostRequest(new GenericUrl(new URL(url)), content);
request.getHeaders().setContentType(content.getMediaType().build());
request.execute();

【问题讨论】:

    标签: forms google-app-engine http blobstore google-http-client


    【解决方案1】:

    docs 中所述,多部分正文必须是multipart/form-data,输入类型为“file”,这会生成带有“filename”部分的Content-Disposition 标头:

    Content-Disposition: form-data; name="myFile"; filename="imagename.bmp"
    

    对于 HttpClient,它应该是 like this

    【讨论】:

    • 我使用的是 Google 的 HttpClient,而不是 apache,因为它已经提供了应用引擎。
    • 我也设置了文件名参数,结果还是一样
    猜你喜欢
    • 2013-04-24
    • 2015-05-04
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多