django上傳檔案

2021-08-26 03:18:15 字數 2264 閱讀 4530

**:

template html(模板檔案):

有如下乙個form:

from django import forms

class uploadfileform(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為空。

以下檢視函式:

必須要將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函式

def handle_uploaded_file(f):

destination = open('some/file/name.txt', 'wb+')

for chunk in f.chunks():

destination.write(chunk)

destination.close()

上傳檔案儲存的位置

儲存上傳檔案前,資料需要存放在某個位置。預設時,當上傳檔案小於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",)

先嘗試裝入記憶體,如不行就存入到臨時檔案。

django 檔案上傳

檔案上傳 當django處理上傳乙個檔案的時候,檔案資料被放在request.files中。這個文件解釋檔案怎麼樣被儲存在磁碟上或者記憶體中,怎樣定製預設的行為。基本檔案上傳 考慮乙個包含filefield的簡單的表單 from django import forms class uploadfil...

django 檔案上傳

檔案上傳 當django處理上傳乙個檔案的時候,檔案資料被放在request.files中。這個文件解釋檔案怎麼樣被儲存在磁碟上或者記憶體中,怎樣定製預設的行為。基本檔案上傳 考慮乙個包含filefield的簡單的表單 from django import forms class uploadfil...

Django檔案上傳

lang en charset utf 8 titletitle head action home method post enctype multipart form data type file name file type submit value 提交 p form div body htm...