2014-04-09 28 views
0

我想跳過上傳URL發送到客戶端的部分,並直接從後端上傳到blobstore。我用this發送多的要求,雖然我得到:從blobstore上傳中獲取500錯誤(缺少;)

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

回答

0

docs指出的,多部分主體具有要與multipart/form-data輸入類型「文件」,它與「文件名」部分產生Content-Disposition頭:

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

隨着HttpClient的它應該是like this

+0

我使用Google的HttpClient,而不是Apache,因爲它已經提供了應用引擎。 – azyoot

+0

我也設置了文件名參數,結果仍然相同 – azyoot