Uploading and saving files using django nonrel in Google App engine? -
according official django documentation uploads, small files saved memory , big files saved disk.
i know how save uploaded files disk? possible?
this code far. works on memory. when try write file disk, or file big in size app crashes.
views.py
# ... def spreadsheet_form(request, id = none): if is_admin_user(request): instance = get_object_or_404(spreadsheet, id=id) if id not none else none form = spreadsheetform(request.post or none, request.files or none, instance=instance) if form.is_valid(): spreadsheet = form.save(commit=false) spreadsheet.name = request.post['name'] spreadsheet.spreadsheet_file = request.files['spreadsheet_file'].name spreadsheet.size = request.files['spreadsheet_file'].size spreadsheet.save() handle_uploaded_file(request.files['spreadsheet_file']) return redirect('/spreadsheets/') return render_to_response("pages/spreadsheet_form.html", {"form": form,"id":id},context_instance=requestcontext(request)) else: return redirect('/', false) # ... def handle_uploaded_file(f): open(f.name, 'wb+') destination: chunk in f.chunks(): destination.write(chunk) models.py
# ... class spreadsheet(models.model): id = models.autofield(primary_key=true) name = models.charfield(max_length=256) spreadsheet_file = models.filefield(upload_to='spreadsheets/') size = models.charfield(max_length=32) created_at = models.datetimefield(auto_now=true) # ... def __unicode__(self): return u'%s' % (self.name ) settings.py
file_upload_handlers = ( "django.core.files.uploadhandler.memoryfileuploadhandler", "django.core.files.uploadhandler.temporaryfileuploadhandler", ) file_upload_max_memory_size = 7000000 file_upload_temp_dir = '/tmp' thanks in advance
there's no such thing 'save disk' in app engine world. closest blobstore, , it's gcs.
django-nonrel includes django storage class upload blobstore. follow this:
http://www.allbuttonspressed.com/blog/django/2010/06/uploads-to-blobstore-and-gridfs-with-django
you don't need fiddle file_upload_handlers, defaults fine.
Comments
Post a Comment