【问题标题】:Google App Engine: Encrypt Blobs Before UploadGoogle App Engine:上传前加密 Blob
【发布时间】:2015-05-04 20:03:17
【问题描述】:

我正在尝试在将 Blob 上传到 Google App Engine Blobstore 之前对其进行加密。

这里是处理程序

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

【问题讨论】:

标签: python google-app-engine blobstore


【解决方案1】:

您似乎对 Blobstore 上传的工作原理存在误解。目前,您似乎正在将文件上传到应用引擎中的 MyUploadHandler 处理程序,然后将文件上传到您从 create_upload_url 获得的 URL 的 blobstore。

这不是它的工作方式。您应该将从 create_upload_url 返回给客户端的 url 返回。然后应该客户端启动文件上传到该 url。

如果要加密文件,则需要在最后一步在客户端进行。

【讨论】:

  • 我知道 ti 是如何工作的,但我需要客户端在服务器端进行加密。这就是我奇怪尝试的原因。我想我会使用云存储API
  • 所以您想通过网络以明文形式发送文件,但在存储之前在服务器端对其进行加密?这是一个奇怪的要求。你能解释一下你的用例吗?
  • 我明白了,这是有道理的。你没有给我足够的背景信息,所以不知道我还能如何提供帮助。但是除了 blobstore 之外,永远不需要上传到任何东西。您可以在上传后使用 GCS 客户端库进行加密。但请注意,如果您将未加密的文件上传到服务器,然后应用加密,则文件将在一段时间内保存在服务器上且未加密。确保您可以接受这种情况。
  • 我正在切换到 GCS
猜你喜欢
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 2015-06-18
  • 2010-10-20
  • 1970-01-01
  • 2014-05-12
  • 2011-03-09
  • 1970-01-01
相关资源
最近更新 更多