Send_blob в GAE - PullRequest
       32

Send_blob в GAE

0 голосов
/ 27 марта 2012

я создал zip-файлы в blobstore в GAE, затем я попытался получить (скачать) этот zip-файл, используя этот код:

def send_blob(blob_key_or_info, content_type=None, save_as=None):

    CONTENT_DISPOSITION_FORMAT = "attachment; filename=\"%s\""

    if isinstance(blob_key_or_info, blobstore.BlobInfo):
        blob_key = blob_key_or_info.key()
        blob_info = blob_key_or_info
    else:
        blob_key = blob_key_or_info
        blob_info = None
    if blob_info:
        content_type = content_type or mime_type(blob_info.filename)
        save_as = save_as or blob_info.filename
        #print save_as
    logging.debug(blob_info)
    response = Response()
    response.headers[blobstore.BLOB_KEY_HEADER] = str(blob_key)
    if content_type:
        if isinstance(content_type, unicode):
            content_type = content_type.encode("utf-8")
        response.headers["Content-Type"] = content_type
    else:
        del response.headers["Content-Type"]

    def send_attachment(filename):
        if isinstance(filename, unicode):
            filename = filename.encode("utf-8")
        response.headers["Content-Disposition"] = (\
            CONTENT_DISPOSITION_FORMAT % filename)
    if save_as:
        if isinstance(save_as, basestring):
            send_attachment(save_as)
        elif blob_info and save_as is True:
            send_attachment(blob_info.filename)
        else:
            if not blob_info:
                raise ValueError("Expected BlobInfo value for blob_key_or_info.")
            else:
                raise ValueError("Unexpected value for save_as")
    return response

и если я вызову эту функцию в main и напечатаю возвращаемое значение из этой функции (response), я получу, например: 200 ОК Длина контента: 0 X-AppEngine-BlobKey: C25nn_O04JT0r8kwHeabDw == Тип контента: приложение / почтовый индекс Содержание-Диспозиция: вложение; имя файла = "test.zip" Но вопрос, как я могу теперь использовать этот ответ, чтобы получить файл на мой компьютер (скачать его)? Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 27 марта 2012

Вам нужно реализовать обработчик загрузки Blobstore для обслуживания файла.Например:

from google.appengine.ext.webapp import blobstore_handlers

class ServeZip(blobstore_handlers.BlobstoreDownloadHandler):
  def get(self):
    blob_key = self.request.get('key')
    if not blobstore.get(blob_key):
      logging.info('blobstore.get(%s) failed' % blob_key)
      self.error(404)
      return

    self.send_blob(blob_key)
    return

Затем на клиенте вы бы позвонили: http://yourapp.appspot.com/servezip?key=<your_url_encoded_blob_key>

Для приведенного выше примера: http://yourapp.appspot.com/servezip?key=C25nn_O04JT0r8kwHeabDw%3D%3D

2 голосов
/ 26 мая 2015

Что ж, Google предоставляет очень хороший API для обработки объектов BlobStore, в основном двух Clsses, называемых BlobstoreDownloadHandler и BlobstoreUploadHandler.

Для загрузки содержимого попробуйте использовать BlobstoreDownloadHandler, и приведенный ниже код поможет вам понять концепцию.

    from google.appengine.ext.webapp import blobstore_handlers
    from google.appengine.ext.blobstore import BlobKey

    class VideoDownloadHelper(blobstore_handlers.BlobstoreDownloadHandler):
        def get(self, blobkey):
            blobKey = BlobKey(blobkey)
            #content_type is optional and by default it is same as uploaded content's content-type.
            self.send_blob(blobKey, content_type="image/jpeg")

И этот метод можно использовать как

    app = webapp2.WSGIApplication([(r'/download-video/([^\.]+)', VideoDownloadHandler)])

. Для дальнейшего чтения вы можете пройти через это https://cloud.google.com/appengine/docs/python/blobstore/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...