Tôi có ứng dụng AppEngine sử dụng blobstore để lưu trữ dữ liệu hình ảnh do người dùng cung cấp. Khi tôi tải hình ảnh lên ứng dụng đó từ một biểu mẫu trong Chrome, nó hoạt động tốt. Khi tôi cố gắng tải lên một hình ảnh từ một ứng dụng Android nó không thành công. Cả hai phương pháp đều hoạt động tốt nếu tôi đang chạy với máy chủ phát triển nhưng tải lên Android không hoạt động đối với dịch vụ trực tiếp.Tải lên AppEngine BlobStore không thành công với yêu cầu hoạt động trong Môi trường phát triển
Đây là yêu cầu từ Chrome:
POST /_ah/upload/?userToken=11001/AMmfu6ZCyMQQ9YdiXal3SmSXIRTQIuSRXkNc-i3JmU0fqx_kJbUJ2OMLcS2lXhVJSK4qs7regViTKzOPz5ejoZYi0nAD5o8vNltiOViQw6DZO7_byZz3Ut0/ALBNUaYAAAAAS_lusgPMAGmpPrg0BuNsJyymX-57ob4i/ HTTP/1.1
Host: photohuntservice.appspot.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.1.249.1064 Safari/532.5
Referer: http://photohuntservice.appspot.com/debug_newpuzzle?userToken=11001
Content-Length: 60360
Cache-Control: max-age=0
Origin: http://photohuntservice.appspot.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarybl05YLmLbFRf2MzN
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
------WebKitFormBoundarybl05YLmLbFRf2MzN
Content-Disposition: form-data; name="userToken"
11001
------WebKitFormBoundarybl05YLmLbFRf2MzN
Content-Disposition: form-data; name="img"; filename="Photo_020908_001.jpg"
Content-Type: image/jpeg
<image data>
------WebKitFormBoundarybl05YLmLbFRf2MzN
Content-Disposition: form-data; name="longitude"
-122.084095
------WebKitFormBoundarybl05YLmLbFRf2MzN
Content-Disposition: form-data; name="latitude"
37.422006
------WebKitFormBoundarybl05YLmLbFRf2MzN--
Đây là yêu cầu từ khách hàng của tôi (được viết bằng Java trên Android, nhưng tôi không nghĩ đó là có liên quan):
POST /_ah/upload/?userToken=11001/AMmfu6Zf9an6AU4lT9UuhIpxOZyOYb1LMwimFpeSh8zr6J1sX9F2ddJW3Qlsw0kwV3oALv-TNPWRQ6g4_Dgwk0UTwF47bbc78Yl44kDeV69MydTuR3N46S4/ALBNUaYAAAAAS_mMr3CYqTg3aVBDjhRxP0DyyRdvotyG/ HTTP/1.1
Content-Type: multipart/form-data;boundary=----WebKitFormBoundaryhdyNAhmOouRDGErG
Cache-Control: max-age=0
Accept: */*
Origin: http://photohuntservice.appspot.com
Connection: keep-alive
Referer: http://photohuntservice.appspot.com/getuploadurl?userToken=11001
Content-Length: 2638
Host: photohuntservice.appspot.com
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)
Expect: 100-Continue
------WebKitFormBoundaryhdyNAhmOouRDGErG
Content-Disposition: form-data; name="userToken"
11001
------WebKitFormBoundaryhdyNAhmOouRDGErG
Content-Disposition: form-data; name="img";filename="PhotoHunt.jpg"
Content-Type: image/jpeg
<image data>
------WebKitFormBoundaryhdyNAhmOouRDGErG
Content-Disposition: form-data; name="latitude"
37.422006
------WebKitFormBoundaryhdyNAhmOouRDGErG
Content-Disposition: form-data; name="longitude"
-122.084095
------WebKitFormBoundaryhdyNAhmOouRDGErG--
Trong cả hai trường hợp, mã Python AppEngine để bắt được yêu cầu giống nhau:
class UploadPuzzle(blobstore_handlers.BlobstoreUploadHandler):
def post(self):
upload_files = self.get_uploads()
Đầu dò là khi chạy trên production AppEngine service self.get_uploads() trả về một danh sách rỗng khi yêu cầu được thực hiện từ ứng dụng khách của tôi. Cả hai yêu cầu trả lại những gì tôi mong đợi (một danh sách có một blob_info trong đó) trên máy chủ phát triển và Chrome trả về những gì tôi mong đợi trong cả hai trường hợp.
Công cụ phát hiện tốt! Bạn có thể nộp lỗi cho điều đó không? –
Đã làm: http://code.google.com/p/googleappengine/issues/detail?id=3273 –
Điều đó @ # $%! máy chủ sản xuất. "Chắc chắn rằng không gian trước khi tên tập tin là thừa, hãy để tôi làm sạch nó", tôi nghĩ. Ồ, cái giá tôi trả cho sự gọn gàng của tôi. – drcode