2012-03-26 3 views
-1

я работал над небольшим проектом, основные функциональные возможности этого проекта следующим образом:Get (Serve) файлы из Blobstore в GAE

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

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

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

4-Получить (подавать) этот почтовый ящик от blobstore на ПК (скачайте этот почтовый индекс, чтобы он был доступен локально).

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

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() выполняется успешно, так что архив архивный файл, содержащий файлы, загруженные пользователем была создана успешно в GAE Blobstore, но проблема точно, что 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 

ли какие-либо идеи по этой проблеме Спасибо заранее?.

+0

Пожалуйста, прекратите публикацию почти одинаковых вопросов. –

+1

Возможный дубликат [Send_blob в GAE] (http://stackoverflow.com/questions/9880865/send-blob-in-gae) –

+0

@Nick Johnson: Извините за это, но проблема все еще существует !!! –

ответ

1

Какая часть обслуживания blob, описанной here, не подходит для вас?

+0

: Этот класс не выполнен (класс ServeHandler), и это моя проблема ?? –

+0

: приложение в main() не выполняется. –

1

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

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

+0

: Я пробовал этот подход, чтобы передать blobinfo через URL-адрес, но проблема в том, что я не могу получить этот ключ (info) из URL-адреса в классе ServerHandler? –

Смежные вопросы