0

アップロード URL がクライアントに送信される部分をスキップして、バックエンドからブロブストアに直接アップロードしたいと考えています。これを使用してマルチパートリクエストを送信しますが、次のようになります。

<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();
4

1 に答える 1

0

docsに記載されているように、マルチパート ボディはmultipart/form-data入力タイプが「file」である必要があり、Content-Disposition「filename」セクションを含むヘッダーが生成されます。

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

HttpClient では、このようなものになるはずです。

于 2014-04-09T20:52:22.013 に答える