django中處理檔案上傳檔案,django上傳檔案

來源:互聯網
上載者:User

django中處理檔案上傳檔案,django上傳檔案

1 template模版檔案uploadfile.html

特別注意的是,只有當request方法是POST,且發送request的<form>有屬性enctype="multipart/form-data"時,request.FILES中包含檔案資料,否則request.FILES為空白。

<form method="post" action="" enctype="multipart/form-data" ><input type="file" name="personico" /><br /><br /><br /><input type="submit" value="提交"/></form><img src="/static/jpg/{{personico}}" width="100px" height="100px" alt="頭像" />

2 視圖函數

if request.method == "POST":        f = request.FILES.get('personico')        baseDir = os.path.dirname(os.path.abspath(__name__));        jpgdir = os.path.join(baseDir,'static','jpg');                filename = os.path.join(jpgdir,f.name);        fobj = open(filename,'wb');        for chrunk in f.chunks():            fobj.write(chrunk);        fobj.close();        return render_to_response('uploadfile.htm',{'personico':f.name});                else:        return render_to_response('uploadfile.htm');

此處說明:將上傳的檔案存放在工程目錄下的static/jpg/目錄下,檔案名稱就是上傳的檔案名稱,只是實驗性的所以沒有加錯誤驗證,如果用於生產環境,需要嚴格驗證,比如檔案是否存在、讀寫錯誤等。

上傳的檔案在request.FILES,是一個近似字典類型的資料類型,擁有基本的4個基本屬性,name檔案名稱/size檔案大小(以位元組為單位)/content_type檔案類型/read檔案內容

擁有的方法chunks()返回一個上傳檔案的分塊產生器,有一個選擇性參數是設定每次讀取的位元組數。如果上傳的檔案很大,使用這個方法可以節省記憶體,不會一下子佔用大量記憶體空間。

 

上傳檔案儲存的位置
儲存上傳檔案前,資料需要存放在某個位置。預設時,當上傳檔案小於2.5M時,django會將上傳檔案的全部內容讀進記憶體。意味著儲存檔案只有一次從記憶體讀取,一次寫磁碟。
但當上傳檔案很大時,django會把上傳檔案寫到臨時檔案中,然後存放到系統臨時檔案夾中。

三個設定控制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",)

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

 

實驗效果:

上傳前效果

 

上傳後效果

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.