2015-05-04 2 views
1

Я пытаюсь зашифровать blob перед загрузкой его в Blobstore Google App Engine.Google App Engine: Шифровать Blobs перед загрузкой

Вот обработчик

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) 

У меня возникли проблемы с последней строкой, где urllib2 пытается разместить запрос.

вот окончательная парта длинного исключения

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 для облачного хранилища Google] (https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/), если это возможно. –

+0

Вот мой gist, показывающий, как приложение может отправить blob в blobstore. https://gist.github.com/voscausa/9222732 – voscausa

+0

@voscausa Спасибо! Считаете ли вы, что GCS будет лучше? Я действительно рассматриваю рекомендации Jaime – Sindico

ответ

-1

Похоже, у вас есть непонимание того, как загрузка Blobstore предназначена для работы. В настоящее время кажется, что вы загружаете файл в обработчик MyUploadHandler в своем приложении, который затем загружает его в blobstore по URL-адресу, который вы получили от create_upload_url.

Это не то, как оно должно работать. Вы должны вернуть URL-адрес, который вы получаете от create_upload_url , обратно клиенту. Затем клиент должен инициировать загрузку файла на этот URL-адрес.

Если вы шифруете файл, вам необходимо сделать это на стороне клиента на последнем шаге.

+0

Я знаю, как работает ti, но мне нужен клиент для шифрования серверной части. В этом причина моей странной попытки. Я думаю, что я собираюсь использовать API хранения облаков – Sindico

+0

, чтобы вы отправляли файл по сети в виде открытого текста, но зашифровали его на стороне сервера, прежде чем хранить его? это странное требование. можете ли вы объяснить свой вариант использования? – user2771609

+0

файл делится через https таким образом не в ясном тексте. – Sindico