django 上传文件夹_django上传文件
template html(模板文件):
有如下一個form:
from django importformsclassUploadFileForm(forms.Form):
title= forms.CharField(max_length=50)
file= forms.FileField()
處理這個form的視圖收到了在request.FILES中的文件數(shù)據(jù)。從上述form來的數(shù)據(jù)可以通過request.FILES['file']來存取。
特別注意的是,只有當(dāng)request方法是POST,且發(fā)送request的
有屬性enctype="multipart/form-data"時,request.FILES中包含文件數(shù)據(jù),否則request.FILES為空。以下視圖函數(shù):
from django.http importHttpResponseRedirectfrom django.shortcuts importrender_to_responsefrom somewhere importhandle_uploader_filedefupload_file(request):if request.method == 'POST':
form=UploadFileForm(request.POST, request.FILES)ifform.is_valid():
handle_uploaded_file(request.FILES['file'])return HttpResponseRedirect('/success/url')else:
form=UploadFileForm()return render_to_response('upload.html', {'form': form})
必須要將request.FILES傳給form的構(gòu)造函數(shù),才能將文件數(shù)據(jù)綁定到form.
處理上傳文件
字典request.FILES中的每一個條目都是一個UploadFile對象。UploadFile對象有如下方法:
1、UploadFile.read():
從文件中讀取全部上傳數(shù)據(jù)。當(dāng)上傳文件過大時,可能會耗盡內(nèi)存,慎用。
2、UploadFile.multiple_chunks():
如上傳文件足夠大,要分成多個部分讀入時,返回True.默認(rèn)情況,當(dāng)上傳文件大于2.5M時,返回True。但這一個值可以配置。
3、UploadFile.chunks():
返回一個上傳文件的分塊生成器。如multiple_chunks()返回True,必須在循環(huán)中使用chrunks()來代替read()。一般情況下直接使用chunks()就行。
4、UploadFile.name():上傳文件的文件名
5、UplaodFile.size():上傳文件的文件大小(字節(jié))
由上面的說明可以寫出handle_uploaded_file函數(shù)
defhandle_uploaded_file(f):
destination= open('some/file/name.txt', 'wb+')for chunk inf.chunks():
destination.write(chunk)
destination.close()
詳細(xì)點(diǎn):
defhandle_uploaded_file(f):
file_name= ""
try:
path= "media/editor" + time.strftime('/%Y/%m/%d/%H/%M/%S/')if notos.path.exists(path):
os.makedirs(path)
file_name= path +f.name
destination= open(file_name, 'wb+')for chunk inf.chunks():
destination.write(chunk)
destination.close()exceptException, e:printereturn file_name
上傳文件保存的位置
保存上傳文件前,數(shù)據(jù)需要存放在某個位置。默認(rèn)時,當(dāng)上傳文件小于2.5M時,django會將上傳文件的全部內(nèi)容讀進(jìn)內(nèi)存。意味著保存文件只有一次從內(nèi)存讀取,一次寫磁盤。
但當(dāng)上傳文件很大時,django會把上傳文件寫到臨時文件中,然后存放到系統(tǒng)臨時文件夾中。
改變upload handler的行為
三個設(shè)置控制django文件上傳的行為:
FILE_UPLOAD_MAX_MEMORY_SIZE:直接讀入內(nèi)存的最大上傳文件大小(字節(jié)數(shù))。當(dāng)大于此值時,文件存放到磁盤。默認(rèn)2.5M字節(jié)
FILE_UPLOAD_TEMP_DIR
FILE_UPLOAD_PERMISSIONS:權(quán)限
FILE_UPLOAD_HANDLERS
上傳文件真正的處理器。修改此項(xiàng)設(shè)置可以完成自定義django上傳文件的過程。
默認(rèn)是:
("django.core.files.uploadhandler.MemoryFileUploadHandler","django.core.files.uploadhandler.TemporaryFileUploadHandler",)
先嘗試裝入內(nèi)存,如不行就存入到臨時文件。
上傳文件封裝方法:
'''文件上傳'''
defhandle_uploaded_file(f):
file_name= ""
try:
path= "media/image" + time.strftime('/%Y/%m/%d/%H/%M/%S/')if notos.path.exists(path):
os.makedirs(path)
file_name= path +f.name
destination= open(file_name, 'wb+')for chunk inf.chunks():
destination.write(chunk)
destination.close()exceptException, e:printereturn file_name
總結(jié)
以上是生活随笔為你收集整理的django 上传文件夹_django上传文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 海盗船ddr4内存:性能猛如虎,稳定如岩
- 下一篇: 中文编程语言_文言文编程语言,让你明白什