2012-02-20 13 views
7

में ज़िप फ़ाइलें और स्टोर जेनरेट करें मैं ऐप इंजन के ब्लॉबस्टोर में एक ज़िप फ़ाइल और स्टोर जेनरेट करने की कोशिश कर रहा हूं। अभी, मुझे ब्लॉबस्टोर से वैध ज़िप फ़ाइल नहीं मिली है। सुनिश्चित नहीं है कि समस्या ज़िप, भंडारण, पुनर्प्राप्ति या डाउनलोड करने के साथ है।जीएई ब्लोबस्टोर

मैंने निम्नलिखित प्रश्नों से स्निपेट के आधार पर कोड बनाया है।

Blobstore में भंडारण के बाद, मैं उन एक फ्लास्क आवेदन के माध्यम से इसे डाउनलोड कर सकते हैं।

यहां मैं जो करने की कोशिश कर रहा हूं उसका सारांश है।

def zipit(): 
    zipstream = StringIO.StringIO() 
    zfile = zipfile.ZipFile(file=zipstream, mode='w') 
    bytes = "lorem ipsum dolor sit amet" 
    zfile.writestr('loremipsum', bytes, compress_type=zipfile.ZIP_STORED) 
    zfile.close() 
    zipstream.seek(0) 
    return zipstream.getvalue() 


zip_file = files.blobstore.create(mime_type='application/zip') 
zip_data = zipit() 

with files.open(zip_file, 'a') as f: 
    f.write(zip_data) 
files.finalize(zip_file) 
blob_key = files.blobstore.get_blob_key(zip_file) 

blob_data = blobstore.BlobReader(blob_key).read() 

# http://flask.pocoo.org/docs/api/ 
response = make_response(blob_data) 
response.headers['Content-Type'] = 'application/zip' 
response.headers['Content-Disposition'] = 'attachment; filename="loremipsum.zip"' 
return response 

किसी भी मदद की बहुत सराहना की जाती है।

उत्तर

6

आपका अधिकांश कोड dev_appserver.py में वेबपैड हैंडलर में मेरे लिए काम करता है। नीचे मेरा संस्करण ज़िप फ़ाइल को सीधे ब्लॉबस्टोर से बाहर करता है, बनाम इसे ऐप इंस्टेंस रैम में पढ़ने की कोशिश करता है और इसकी सेवा करता है। हो सकता है कि आप यही चाहते हैं? यदि नहीं, तो अपने कोड में समस्या की तलाश करना जारी रखें जो मूल्य को पढ़ता है और सेवा देता है, क्योंकि मेरा मानना ​​है कि आप ब्लॉबस्टोर में एक वैध ज़िप फ़ाइल बना रहे हैं।

#!/usr/bin/env python 

import StringIO 
import zipfile 
from google.appengine.api import files 
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 import util 

def zipit(): 
    zipstream = StringIO.StringIO() 
    zfile = zipfile.ZipFile(file=zipstream, mode='w') 
    bytes = "lorem ipsum dolor sit amet" 
    zfile.writestr('loremipsum', bytes, compress_type=zipfile.ZIP_STORED) 
    zfile.close() 
    zipstream.seek(0) 
    return zipstream.getvalue() 

class MainHandler(blobstore_handlers.BlobstoreDownloadHandler): 
    def get(self): 
     k = self.request.get('key') 
     if k: 
      self.send_blob(k) 
      return 

     zip_file = files.blobstore.create(mime_type='application/zip') 
     zip_data = zipit() 

     with files.open(zip_file, 'a') as f: 
      f.write(zip_data) 
     files.finalize(zip_file) 
     blob_key = files.blobstore.get_blob_key(zip_file) 

     self.response.out.write('<a href="/getzip?key=%s">get zip</a>' % blob_key) 


application = webapp.WSGIApplication([('/getzip', MainHandler)]) 

def main(): 
    util.run_wsgi_app(application) 

if __name__ == '__main__': 
    main() 
+0

धन्यवाद! आपका कोड काम करता है। शायद यह पुनर्प्राप्ति के दौरान दूषित हो रहा है। कार्यक्रम फ्लास्क पर बनाया गया है, और यही कारण है कि, मैं फ़ाइल क्यों पढ़ता हूं और सेवा करता हूं। मैंने send_blob की कोशिश की, लेकिन इसके लिए हेडर उपलब्ध होने की आवश्यकता है। फ्लास्क ढांचे के माध्यम से सीधे ब्लॉब फ़ाइल की सेवा के लिए मुझे कुछ कामकाज मिलना होगा। –

+0

ऐसा लगता है कि यह एक समस्या है जो यूआरएल को संभालने के लिए मिलता है। ब्लॉबस्टोर में छवियों के लिए get_serving_url है। मुझे अभी तक पता नहीं है कि फ्लॉस्क के माध्यम से ब्लॉबस्टोर से फ़ाइलों को कैसे सेवा दी जाए। –

+0

एक और कदम। 'प्रतिक्रिया = make_response()' ' response.headers [ 'एक्स-AppEngine-BlobKey'] = blob_key' ' response.headers [ 'सामग्री-प्रकार'] = 'आवेदन/zip'' 'response.headers ['सामग्री-विस्थापन'] = 'लगाव; filename = "loremipsum.zip" ' ' वापसी प्रतिक्रिया' लेकिन यह अभी भी मूल समस्या का समाधान नहीं करता है! –

संबंधित मुद्दे