99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

django中上傳文件詳解

發(fā)布時(shí)間:2016-07-12 20:52  回復(fù):0  查看:3826   最后回復(fù):2016-07-12 20:52  

我們?cè)?a target="_blank">學(xué)習(xí)django 時(shí),會(huì)經(jīng)常遇到上傳文件的時(shí)候,這里筆者就給大家寫一個(gè)簡(jiǎn)單的教程。

 

1 template模版文件uploadfile.html

特別注意的是,只有當(dāng)request方法是POST,且發(fā)送request<form>有屬性enctype="multipart/form-data"時(shí),request.FILES中包含文件數(shù)據(jù),否則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 視圖函數(shù)

 

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');

 

此處說(shuō)明:將上傳的文件存放在工程目錄下的static/jpg/目錄下,文件名就是上傳的文件名,只是實(shí)驗(yàn)性的所以沒有加錯(cuò)誤驗(yàn)證,如果用于生產(chǎn)環(huán)境,需要嚴(yán)格驗(yàn)證,比如文件是否存在、讀寫錯(cuò)誤等。

上傳的文件在request.FILES,是一個(gè)近似字典類型的數(shù)據(jù)類型,擁有基本的4個(gè)基本屬性,name文件名/size文件大小(以字節(jié)為單位)/content_type文件類型/read文件內(nèi)容

擁有的方法chunks()返回一個(gè)上傳文件的分塊生成器,有一個(gè)可選參數(shù)是設(shè)置每次讀取的字節(jié)數(shù)。如果上傳的文件很大,使用這個(gè)方法可以節(jié)省內(nèi)存,不會(huì)一下子占用大量?jī)?nèi)存空間。

 

上傳文件保存的位置
保存上傳文件前,數(shù)據(jù)需要存放在某個(gè)位置。默認(rèn)時(shí),當(dāng)上傳文件小于2.5M時(shí),django會(huì)將上傳文件的全部?jī)?nèi)容讀進(jìn)內(nèi)存。意味著保存文件只有一次從內(nèi)存讀取,一次寫磁盤。
但當(dāng)上傳文件很大時(shí),django會(huì)把上傳文件寫到臨時(shí)文件中,然后存放到系統(tǒng)臨時(shí)文件夾中。

三個(gè)設(shè)置控制django文件上傳的行為:
FILE_UPLOAD_MAX_MEMORY_SIZE:直接讀入內(nèi)存的最大上傳文件大小(字節(jié)數(shù))。當(dāng)大于此值時(shí),文件存放到磁盤。默認(rèn)2.5M字節(jié)
FILE_UPLOAD_TEMP_DIR
FILE_UPLOAD_PERMISSIONS:權(quán)限
FILE_UPLOAD_HANDLERS
上傳文件真正的處理器。修改此項(xiàng)設(shè)置可以完成自定義django上傳文件的過(guò)程。
默認(rèn)是:

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

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

先嘗試裝入內(nèi)存,如不行就存入到臨時(shí)文件。

 

實(shí)驗(yàn)效果:

上傳前效果

django中上傳文件詳解

 

上傳后效果

django中上傳文件詳解

原文來(lái)自:博客園



您還未登錄,請(qǐng)先登錄

熱門帖子

最新帖子

?