2013-07-31 2 views
0

업로드에 관한 공식 django 문서에 따르면, 작은 파일은 메모리에 저장되고 큰 파일은 디스크에 저장됩니다.Google App Engine에서 django nonrel을 사용하여 파일을 업로드하고 저장 하시겠습니까?

업로드 된 파일을 디스크에 저장하는 방법을 알고 싶습니다. 가능한가?

이것은 지금까지 제 코드입니다. 그러나 그것은 단지 메모리에서만 작동합니다. 파일을 디스크에 쓰려고하거나 파일의 크기가 크면 응용 프로그램이 다운됩니다.

views.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) 

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' 

감사합니다

답변

1

App Engine 세계에서 '디스크에 저장'과 같은 것은 없습니다. 가장 가까운 것은 Blobstore 였고 이제는 GCS입니다.

django-nonrel에는 Blobstore에 업로드 할 django 저장소 클래스가 포함되어 있습니다. 이에 따라 : 당신은 FILE_UPLOAD_HANDLERS 바이올린 필요가 없습니다

http://www.allbuttonspressed.com/blog/django/2010/06/Uploads-to-Blobstore-and-GridFS-with-Django

, 기본값은 정상입니다.

+0

정보를 제공해 주셔서 감사합니다. 이 유용한 문서도 찾았습니다. http://www.allbuttonspressed.com/projects/django-filetransfers#installation 데이터 저장소가 파일 저장에 가장 적합한 옵션이 아닌 것 같습니다. Blobstore 또는 다른 외부 위치를 통해 수행되어야 할 것 같습니다. 예 : AWS S3 – ipegasus

관련 문제