में ज़िप फ़ाइलें और स्टोर जेनरेट करें मैं ऐप इंजन के ब्लॉबस्टोर में एक ज़िप फ़ाइल और स्टोर जेनरेट करने की कोशिश कर रहा हूं। अभी, मुझे ब्लॉबस्टोर से वैध ज़िप फ़ाइल नहीं मिली है। सुनिश्चित नहीं है कि समस्या ज़िप, भंडारण, पुनर्प्राप्ति या डाउनलोड करने के साथ है।जीएई ब्लोबस्टोर
मैंने निम्नलिखित प्रश्नों से स्निपेट के आधार पर कोड बनाया है।
- Is it possible to generate and return a ZIP file with App Engine?
- Zipping dynamic files in App Engine (Python)
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
किसी भी मदद की बहुत सराहना की जाती है।
धन्यवाद! आपका कोड काम करता है। शायद यह पुनर्प्राप्ति के दौरान दूषित हो रहा है। कार्यक्रम फ्लास्क पर बनाया गया है, और यही कारण है कि, मैं फ़ाइल क्यों पढ़ता हूं और सेवा करता हूं। मैंने send_blob की कोशिश की, लेकिन इसके लिए हेडर उपलब्ध होने की आवश्यकता है। फ्लास्क ढांचे के माध्यम से सीधे ब्लॉब फ़ाइल की सेवा के लिए मुझे कुछ कामकाज मिलना होगा। –
ऐसा लगता है कि यह एक समस्या है जो यूआरएल को संभालने के लिए मिलता है। ब्लॉबस्टोर में छवियों के लिए get_serving_url है। मुझे अभी तक पता नहीं है कि फ्लॉस्क के माध्यम से ब्लॉबस्टोर से फ़ाइलों को कैसे सेवा दी जाए। –
एक और कदम। 'प्रतिक्रिया = make_response()' ' response.headers [ 'एक्स-AppEngine-BlobKey'] = blob_key' ' response.headers [ 'सामग्री-प्रकार'] = 'आवेदन/zip'' 'response.headers ['सामग्री-विस्थापन'] = 'लगाव; filename = "loremipsum.zip" ' ' वापसी प्रतिक्रिया' लेकिन यह अभी भी मूल समस्या का समाधान नहीं करता है! –