日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

django 上传文件夹_django上传文件

發布時間:2024/2/28 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 django 上传文件夹_django上传文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

template html(模板文件):

有如下一個form:

from django importformsclassUploadFileForm(forms.Form):

title= forms.CharField(max_length=50)

file= forms.FileField()

處理這個form的視圖收到了在request.FILES中的文件數據。從上述form來的數據可以通過request.FILES['file']來存取。

特別注意的是,只有當request方法是POST,且發送request的

有屬性enctype="multipart/form-data"時,request.FILES中包含文件數據,否則request.FILES為空。

以下視圖函數:

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的構造函數,才能將文件數據綁定到form.

處理上傳文件

字典request.FILES中的每一個條目都是一個UploadFile對象。UploadFile對象有如下方法:

1、UploadFile.read():

從文件中讀取全部上傳數據。當上傳文件過大時,可能會耗盡內存,慎用。

2、UploadFile.multiple_chunks():

如上傳文件足夠大,要分成多個部分讀入時,返回True.默認情況,當上傳文件大于2.5M時,返回True。但這一個值可以配置。

3、UploadFile.chunks():

返回一個上傳文件的分塊生成器。如multiple_chunks()返回True,必須在循環中使用chrunks()來代替read()。一般情況下直接使用chunks()就行。

4、UploadFile.name():上傳文件的文件名

5、UplaodFile.size():上傳文件的文件大小(字節)

由上面的說明可以寫出handle_uploaded_file函數

defhandle_uploaded_file(f):

destination= open('some/file/name.txt', 'wb+')for chunk inf.chunks():

destination.write(chunk)

destination.close()

詳細點:

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

上傳文件保存的位置

保存上傳文件前,數據需要存放在某個位置。默認時,當上傳文件小于2.5M時,django會將上傳文件的全部內容讀進內存。意味著保存文件只有一次從內存讀取,一次寫磁盤。

但當上傳文件很大時,django會把上傳文件寫到臨時文件中,然后存放到系統臨時文件夾中。

改變upload handler的行為

三個設置控制django文件上傳的行為:

FILE_UPLOAD_MAX_MEMORY_SIZE:直接讀入內存的最大上傳文件大小(字節數)。當大于此值時,文件存放到磁盤。默認2.5M字節

FILE_UPLOAD_TEMP_DIR

FILE_UPLOAD_PERMISSIONS:權限

FILE_UPLOAD_HANDLERS

上傳文件真正的處理器。修改此項設置可以完成自定義django上傳文件的過程。

默認是:

("django.core.files.uploadhandler.MemoryFileUploadHandler","django.core.files.uploadhandler.TemporaryFileUploadHandler",)

先嘗試裝入內存,如不行就存入到臨時文件。

上傳文件封裝方法:

'''文件上傳'''

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

總結

以上是生活随笔為你收集整理的django 上传文件夹_django上传文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。