मुझे दुविधा है .. मैं फ्रेमवर्क के रूप में tipfy का उपयोग कर scribd स्टोर और blobstore दोनों में फाइल अपलोड कर रहा हूँ। मेरे पास क्रिया के साथ वेबफॉर्म है blobstore.create_upload_url द्वारा नहीं बनाया गया है (मैं सिर्फ url_for ('myhandler') का उपयोग कर रहा हूं)। मैंने ऐसा इसलिए किया क्योंकि अगर मैं ब्लॉबस्टोर हैंडलर का उपयोग कर रहा हूं तो POST प्रतिक्रिया पार्स की गई है और मैं स्क्रिड स्टोर में फ़ाइल अपलोड करने के लिए सामान्य पायथन-स्क्रिब एपीआई का उपयोग नहीं कर सकता। अब मैं काम कर रहा है स्क्रिप्ड सेवर:प्रयोगात्मक एपीआई का उपयोग करके ब्लॉबस्टोर में बड़ी फ़ाइलों को कैसे लिखें?
class UploadScribdHandler(RequestHandler, BlobstoreUploadMixin):
def post(self):
uploaded_file = self.request.files.get('upload_file')
fname = uploaded_file.filename.strip()
try:
self.post_to_scribd(uploaded_file, fname)
except Exception, e:
# ... get the exception message and do something with it
msg = e.message
# ...
# reset the stream to zero (beginning) so the file can be read again
uploaded_file.seek(0)
#removed try-except to see debug info in browser window
# Create the file
file_name = files.blobstore.create(_blobinfo_uploaded_filename=fname)
# Open the file and write to it
with files.open(file_name, 'a') as f:
f.write(uploaded_file.read())
# Finalize the file. Do this before attempting to read it.
files.finalize(file_name)
# Get the file's blob key
blob_key = files.blobstore.get_blob_key(file_name)
return Response('done')
def post_to_scribd(self, uploaded_file, fname):
errmsg =''
uploaded_file = self.request.files.get('upload_file')
fname = uploaded_file.filename.strip()
fext = fname[fname.rfind('.')+1:].lower()
if (fext not in ALLOWED_EXTENSION):
raise Exception('This file type does not allowed to be uploaded\n')
if SCRIBD_ENABLED:
doc_title = self.request.form.get('title')
doc_description = self.request.form.get('description')
doc_tags = self.request.form.get('tags')
try:
document = scribd.api_user.upload(uploaded_file, fname, access='private')
#while document.get_conversion_status() != 'DONE':
# time.sleep(2)
if not doc_title:
document.title = fname[:fname.rfind('.')]
else:
document.title = doc_title
if not doc_description:
document.description = 'This document was uploaded at ' + str(datetime.datetime.now()) +'\n'
else:
document.description = doc_description
document.tags = doc_tags
document.save()
except scribd.ResponseError, err:
raise Exception('Scribd failed: error code:%d, error message: %s\n' % (err.errno, err.strerror))
except scribd.NotReadyError, err:
raise Exception('Scribd failed: error code:%d, error message: %s\n' % (err.errno, err.strerror))
except:
raise Exception('something wrong exception')
आप इसे देख सकते हैं भी Blobstore में फ़ाइल की बचत होती है .. लेकिन अगर मैं बड़ा फ़ाइल को अपलोड कर रहा हूँ (यानी 5Mb) मैं
RequestTooLargeError: The request to API call file.Append() was too large.
Request: docs.upload(access='private', doc_type='pdf', file=('PK\x03\x04\n\x00\x00\x00\x00\x00"\x01\x10=\x00\x00(...)', 'test.pdf'))
प्राप्त कर रहा हूँ मेरे द्वारा यह कैसे किया जा सकता है? धन्यवाद!
आपके प्रश्न और इसके उत्तरों ने मुझे बहुत मदद की, चीयर्स! – selurvedu