我有通過AJAX預先上傳文件的HTML表單。因此,在Django的後端我查看下面的代碼,這AJAX調用該過程:Django:在磁盤上存儲InMemoryUploadedFile
@csrf_exempt
def book_upload(request):
if request.method == 'POST':
log.info('received POST to main book_upload view')
if request.FILES is None:
return HttpResponseBadRequest('Must have files attached!')
log.info('request has FILES')
file_types = (u'file_pdf', u'file_djvu', u'file_doc', u'file_epub', u'file_djvu', u'file_fb2', u'file_txt', u'file_chm', u'file_other');
file = None
file_type = None
for ft in file_types:
if ft in request.FILES:
file = request.FILES[ft]
file_type = ft
break
if file is None:
return HttpResponseBadRequest('Bad file type')
file_path = file.temporary_file_path()
result = {"path": file_path, "format": file_type}
response_data = simplejson.dumps(result)
if "application/json" in request.META['HTTP_ACCEPT_ENCODING']:
mimetype = 'application/json'
else:
mimetype = 'text/plain'
return HttpResponse(response_data, mimetype=mimetype)
else:
return HttpResponse('Only POST accepted')
但在這段代碼的問題。它適用於超過2.5 MB的文件(因爲使用TemporaryUploadedFile比使用默認設置的文件大小大於2.5 MB)。因此,這段代碼基於request.FILES包含TemporaryUploadedFile類型的對象。但在某些情況下,我會收到大小爲< 2.5 MB的文件。 request.FILES包含InMemoryUploadedFile。
所以,我想要做以下 - 每個文件,這是通過ajax上傳應該臨時存儲。內存不是一個好的地方 - 因爲最終重新存儲文件(表單提交後)將不會在內存中存儲有關此文件的信息。所以,任務是將InMemoryUploadedFile「轉換」爲TemporaryUploadedFile - 有可能嗎?
PS
也許我應該簡單地讀取從InMemoryUploadedFile對象文件內容,並將其手工寫入到磁盤(對於實施例/ tmp目錄)。你怎麼想?
PPS
而且彼此的問題 - 它是一個好主意,做事先上傳到臨時目錄:)對我來說,形式有6個輸入[type = file]元素,他們每個人上傳不同的文件?類型(六個用於UI需求)。
TIA!
THX!它已經完成了!:-) – dizpers 2012-08-05 15:30:18