在谷歌应用程序引擎中使用django Nonl上传和保存文件?
根据django关于上传的官方文档,小文件保存到内存,大文件保存到磁盘 我想知道如何将上传的文件保存到磁盘?可能吗 这是到目前为止我的代码。但它只对记忆有效。当我试图将文件写入磁盘,或文件太大时,应用程序崩溃 视图.py在谷歌应用程序引擎中使用django Nonl上传和保存文件?,django,google-app-engine,file-upload,django-nonrel,Django,Google App Engine,File Upload,Django Nonrel,根据django关于上传的官方文档,小文件保存到内存,大文件保存到磁盘 我想知道如何将上传的文件保存到磁盘?可能吗 这是到目前为止我的代码。但它只对记忆有效。当我试图将文件写入磁盘,或文件太大时,应用程序崩溃 视图.py # ... def spreadsheet_form(request, id = None): if is_admin_user(request): instance = get_object_or_404(Spreadsheet, id=id) if
# ...
def spreadsheet_form(request, id = None):
if is_admin_user(request):
instance = get_object_or_404(Spreadsheet, id=id) if id is 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):
with open(f.name, 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
# ...
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 )
FILE_UPLOAD_HANDLERS = (
"django.core.files.uploadhandler.MemoryFileUploadHandler",
"django.core.files.uploadhandler.TemporaryFileUploadHandler",
)
FILE_UPLOAD_MAX_MEMORY_SIZE = 7000000
FILE_UPLOAD_TEMP_DIR = '/tmp'
型号.py
# ...
def spreadsheet_form(request, id = None):
if is_admin_user(request):
instance = get_object_or_404(Spreadsheet, id=id) if id is 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):
with open(f.name, 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
# ...
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 )
FILE_UPLOAD_HANDLERS = (
"django.core.files.uploadhandler.MemoryFileUploadHandler",
"django.core.files.uploadhandler.TemporaryFileUploadHandler",
)
FILE_UPLOAD_MAX_MEMORY_SIZE = 7000000
FILE_UPLOAD_TEMP_DIR = '/tmp'
设置.py
# ...
def spreadsheet_form(request, id = None):
if is_admin_user(request):
instance = get_object_or_404(Spreadsheet, id=id) if id is 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):
with open(f.name, 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
# ...
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 )
FILE_UPLOAD_HANDLERS = (
"django.core.files.uploadhandler.MemoryFileUploadHandler",
"django.core.files.uploadhandler.TemporaryFileUploadHandler",
)
FILE_UPLOAD_MAX_MEMORY_SIZE = 7000000
FILE_UPLOAD_TEMP_DIR = '/tmp'
提前感谢在应用程序引擎世界中没有“保存到磁盘”这样的东西。最近的是Blobstore,现在是地面军事系统 django Nonl包含一个django存储类,用于上载到Blobstore。遵循以下步骤:
您不需要摆弄文件上传处理程序,默认设置很好。谢谢您提供的信息。我还发现了这个有用的文档:看起来数据存储不是保存文件的最佳选择。可能必须通过blobstore或其他外部位置完成。例如:AWS S3