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",)

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

 

實驗效果:

上傳前效果

 

上傳后效果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM