2015-05-04 97 views
1

我想在將它上傳到Google App Engine Blobstore之前先加密一個斑點。Google App Engine:上傳前加密斑點

這裏是我有哪裏的urllib2試圖發佈請求的最後一行的問題處理

class MyUploadHandler(webapp2.RequestHandler): 
    def post(self): 
     upload_url = blobstore.create_upload_url('/myAfterUploadHandler') 
     inFile = self.request.POST.multi['file'].file 
     outFile = StringIO.StringIO() 
     encryptFile(inFile,outFile,DATAKEY) 
     datagen, headers = multipart_encode({"file": outFile}) 
     request = urllib2.Request(upload_url, \ 
           datagen, headers) 
     self.response = urllib2.urlopen(request) 

這裏是長異常的最後單方面

File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/urlfetch.py", line 270, in fetch 
    allow_truncated, follow_redirects, validate_certificate) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/urlfetch.py", line 326, in make_fetch_call 
    request.set_payload(payload) 
    File "cpp_message.pyx", line 124, in cpp_message.SetScalarAccessors.Setter (third_party/apphosting/python/protobuf/proto1/cpp_message.cc:2229) 
TypeError: <type 'instance'> has type <type 'instance'>, but expected one of: str, unicode 
+1

如果可能,不是針對該特定問題的答案,但我建議您使用[Python雲端存儲客戶端](https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/)。 –

+0

這是我的要點,顯示了應用程序如何將blob發送到blobstore。 https://gist.github.com/voscausa/9222732 – voscausa

+0

@voscausa謝謝!你認爲GCS會更好嗎?我真的在考慮海梅建議 – Sindico

回答

-1

好像你的Blob存儲上傳的是如何設計工作的一種誤解。目前,您好像正在將文件上傳到應用程序引擎中的MyUploadHandler處理程序,然後將其上傳到您從create_upload_url獲取的URL的blobstore。

這並非如此。您應該將您從create_upload_url 獲得的網址返回給客戶端。客戶端然後應該啓動文件上傳到該網址。

如果您正在加密文件,則需要在最後一步中在客戶端執行此操作。

+0

我知道ti如何工作,但我需要客戶端要加密的服務器端。這是我奇怪的嘗試的原因。我想我將使用雲存儲API – Sindico

+0

,因此您希望以明文形式通過網絡發送文件,但是在存儲之前在服務器端對其進行加密?這是一個奇怪的要求。你能解釋你的用例嗎? – user2771609

+0

該文件通過https共享,因此不以明文形式共享。 – Sindico