Получить (обслуживать) файлы из магазина в GAE - PullRequest
0 голосов
/ 27 марта 2012

я работал над небольшим проектом, основные функции этого проекта следующие:

1 - загрузка файлов с ПК пользователя (с использованием загрузки файлов в формате HTML (отправка форм))

2-Сожмите эти загруженные файлы в один zip-архив.

3-Сохраните этот Zip-файл в BlobStore GAE.

4-Получите (подайте) этот zip-файл из хранилища BLOB-объектов на ПК (загрузите этот zip-файл вбыть доступными локально).

Шаг 1,2 и 3 были выполнены правильно, но проблема в шаге 4; я не могу загрузить этот Zip из магазина;Вот код, который я использовал:

from __future__ import with_statement
from google.appengine.api import files
import cgi, cgitb ; cgitb.enable()
import StringIO
import zipfile
from google.appengine.ext import blobstore
from google.appengine.ext import webapp
from google.appengine.ext.webapp import blobstore_handlers
from google.appengine.ext.webapp.util import run_wsgi_app
glob_blob_info="" 
class zip():
    def z(self):
        form = cgi.FieldStorage()
        zipstream=StringIO.StringIO()
        zfile = zipfile.ZipFile(file=zipstream,mode="w",compression=zipfile.ZIP_DEFLATED)
        file_upload = form['file[]']
        filename2 = file_upload.filename
        data=file_upload.file.read()
        zfile.writestr(filename2,data)
        zfile.close()
        zipstream.seek(0)
        zip_file = files.blobstore.create(mime_type='application/zip',_blobinfo_uploaded_filename='test.zip')
        with files.open(zip_file, 'a') as f:
            f.write(zipstream.getvalue())
        files.finalize(zip_file)
        blob_key = files.blobstore.get_blob_key(zip_file)
        print blob_key
        blob_info = blobstore.BlobInfo.get(blob_key)
        print blob_info
        global glob_blob_info
        glob_blob_info=blob_info
class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
  def get(self):
    print "doaa"
    global glob_blob_info 
    glob_blob_info = urllib.unquote(glob_blob_info)
    blob_info = blobstore.BlobInfo.get(glob_blob_info)
    self.send_blob(glob_blob_info,save_as=True)



def main():
    application = webapp.WSGIApplication( [('/serve', ServeHandler),], debug=True)
    debug=True)
    c=zip()
    c.z()
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

Теперь class zip() выполняется так, что почтовый архив, содержащий файлы, загруженные пользователем, был успешно создан в Blobstore GAE, но проблема заключается именно в том, чтоclass ServeHandler(blobstore_handlers.BlobstoreDownloadHandler): не был выполнен, когда я запустил этот код, у меня есть такой вывод:

Status: 404 Not Found 
Content-Type: text/html;
charset=utf-8 Cache-Control: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT 
Content-Length: 0

Есть какие-нибудь идеи для этой проблемы? Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 28 марта 2012

Я знаю, что это может быть очевидно, но настроен ли ваш app.yaml для обработки этого пути приложения? Это даст вам 404. Кроме того, почему вы используете глобальный здесь? Я бы избежал этого. Передайте ему ключ безопасного блоба URL как часть URL или в параметре URL и получите из него информацию о блобе. Если вы используете global с appengine, у вас будут всевозможные проблемы.

Я использовал хранилище BLOB-объектов для создания файлов разных типов, и у меня никогда не возникало проблем. Скорее всего, проблема в вашем коде / приложении, чем в send_blob.

1 голос
/ 27 марта 2012

Какая часть обслуживания описанного * BLOB здесь не работает для вас?

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