亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Django文件上傳機(jī)制詳解

2019-11-11 05:11:11
字體:
供稿:網(wǎng)友

文件上傳

    當(dāng)Django處理上傳一個文件的時候,文件數(shù)據(jù)被放在request.FILES中。這個文檔解釋文件怎么樣被存儲在磁盤上或者內(nèi)存中,怎樣定制默認(rèn)的行為?;疚募蟼骺紤]一個包含F(xiàn)ileField的簡單的表單:from  django  import  formsclassUploadFileForm(forms.Form):   title=forms.CharField(max_length=50)   file=forms.FileField()一個處理這個表單的視圖將在request.FILES中接受文件數(shù)據(jù) ,request.FILES是一個字典,它對每個FileField(或者是ImageField,或者是其他的FileField的子類)都包含一個key.所以 從上面的表單中來的數(shù)據(jù)將可以通過request.FILES['file']鍵來訪問.注意request.FILES只有 在request方法是POST并且發(fā)出POST請求的

有屬性enctype="multipart/form-data".否則,request。FILES將是空的??戳硪粋€簡單的;from fdjango.http imPRot HttpResponseRedirectfrom django.shortcuts import render_to_responsefrom somewhere import handle_uploaded_filedef upload_file(request):    if request.method == 'post':        form =  UploadFileForm(rquest.POST,request.FILES)        if form.is_valid():            handle_uploaded_file(request.FILES['file'])            return HttpResponseRedirect('/success/ur/')   else:        form = UploadFileForm()    return render_to_response('upload.html',{'form':form})要注意,我們必須將request.FILES傳遞到表單的構(gòu)造器中;這就是文件數(shù)據(jù)怎樣和表單沾上邊的 。處理上傳的文件最后的難題是怎樣處理從request.FILES中獲得的真實(shí)的文件。這個字典的每個輸入都是一個UploadedFile對象——一個上傳之后的文件的簡單的包裝。你通常會使用下面的幾個方法來訪問被上傳的內(nèi)容:UploadedFile.read():從文件中讀取整個上傳的數(shù)據(jù)。小心整個方法:如果這個文件很大,你把它讀到內(nèi)存中會弄慢你的系統(tǒng)。你可以想要使用chunks()來代替,看下面;UploadedFile.multiple_chunks():如果上傳的文件足夠大需要分塊就返回真。默認(rèn)的這個值是2.5兆,當(dāng)然這個值是可以調(diào)節(jié)的,看下面的UploadedFile.chunks():一個產(chǎn)生器,返回文件的塊。如果multiple_chunks()是真的話,你應(yīng)該在一個循環(huán)中使用這個方法,而不是使用read();UploadedFile.name:上傳文件的名字(比如m_file.txt)UploadedFile.size:以bytes表示的上傳的文件的大小。還有其他的幾個方法和屬性。你可以自己去查。把他們放在一起,這里是一個你處理上傳文件的通常方法:def handle_uploaded_file(f):    destination = open('some/file/name.txt','wb+')    for chunk in f.chunks():         destination.write(chunk)    destination.close()在UploadedFile.chunks()上循環(huán)而不是用read()保證大文件不會大量使用你的系統(tǒng)內(nèi)存。上傳的數(shù)據(jù)存在哪里?在你保存上傳的文件之前,數(shù)據(jù)需要被保存在某些地方。默認(rèn)呢的,如果一個上傳的文件小于2.5兆,Django會將上傳的東西放在內(nèi)存里。這意味著只要從內(nèi)存讀取數(shù)據(jù)并保存到硬盤上,所以很快。然而,如果一個上傳的文件太大,Django將將上傳的文件寫到一個臨時的文件中,這個文件在你的臨時文件路徑中。在Unix-like的平臺上意味著你可以預(yù)見Django產(chǎn)生一個文件保存為/tmp/tmpzfp6I6.upload的文件。如果這個文件足夠大,你可以觀察到這個文件的大小在增大。很多細(xì)節(jié)--2.5M;/tmp;等 等 都是簡單的看上去合理的默認(rèn)值。繼續(xù)閱讀看看你怎么樣個性化或者完全替代掉上傳行為。改變上傳處理行為三個設(shè)置改變Django的上傳處理行為:FILE_UPLOAD_MAX_MEMORY_SIZE:以bytes為單位的到內(nèi)存中的最大大小,。比這個值大的文件將被先存到磁盤上。默認(rèn)是2.5兆FILE_UPLOAD_TEMP_DIR:比FILE_UPLOAD_MAX_MEMORY_SIZE大的文件將被臨時保存的地方。默認(rèn)是系統(tǒng)標(biāo)準(zhǔn)的臨時路徑。FILE_UPLOAD_PERMISSIONS:如果這個沒有給出或者是None,你將獲得獨(dú)立于系統(tǒng)的行為。大多數(shù)平臺,臨時文件有一個0600模式,從內(nèi)存保存的文件將使用系統(tǒng)標(biāo)準(zhǔn)umask。FILE_UPLOAD_HANDLERS:上傳文件的處理器。改變這個設(shè)置允許完全個性化——甚至代替——Django的上傳過程。默認(rèn)是:("django.core.files.uploadhandler.MemoryFileUploadHandler", "django.core.files.uploadhandler.TemporaryFileUploadHandler",)UploadedFile 對象class UploadedFile作為那些重File繼承的補(bǔ)充,素有的UploadedFile對象定義了下面的方法和屬性:UploadedFile.content_type文件的content_type頭(比如text/plain orapplication/pdf)。像用戶提供的任何數(shù)據(jù)一樣,你不應(yīng)該信任上傳的數(shù)據(jù)就是這個類型。你仍然要驗(yàn)證這個文件包含這個頭聲明的content-type——“信任但是驗(yàn)證”。UploadedFile.charset對于text/*的content-types,瀏覽器提供的字符集。再次,“信任但是驗(yàn)證”是最好的策略。UploadedFile.temporary_file_path():只有被傳到磁盤上的文件才有這個方法,它返回臨時上傳文件的全路徑。注意: 像通常的Python文件,你可以迭代上傳的文件來一行一行得讀取文件:for line in uploadedfile:    do_something_with(line)然而,不同于標(biāo)準(zhǔn)Python文件,UploadedFile值懂得/n(也被稱為Unix風(fēng)格)的結(jié)尾。如果你知道你需要處理有不同風(fēng)格結(jié)尾的文件的時候,你要在你的視圖中作出處理。上傳處理句柄:當(dāng)一個用戶上傳一個文件,Django敬愛那個這個文件數(shù)據(jù)傳遞給上傳處理句柄——一個處理隨著文件上傳處理文件的小類。上傳處理句柄被FILE_UPLOAD_HANDLERS初始化定義,默認(rèn)是:("django.core.files.uploadhandler.MemoryFileUploadHandler", "django.core.files.uploadhandler.TemporaryFileUploadHandler"

,)這兩個提供了Django處理小文件和大文件的默認(rèn)上產(chǎn)行為。你可以個性化處理句柄來個性化Django處理文件的行為。比如你可以使用個性化的處理句柄來強(qiáng)制用戶配額,實(shí)時地壓縮數(shù)據(jù),渲染進(jìn)度條,甚至在保存在本地的同時向另一個存儲地發(fā)送數(shù)據(jù)。實(shí)時修改上傳處理句柄有的時候某些視圖要使用不同的上傳行為。這種情況下,你可以重寫一個上傳處理句柄,通過request.upload_handlers來修改。默認(rèn)的,這個列表包含F(xiàn)ILE_UPLOAD_HANDLERS提供的處理句柄,但是你可以像修改其他列表一樣修改這個列表。比如,加入你寫了一個叫做ProgressBarUploadHandler 的處理句柄。你可以通過下面的形式加到你的上傳處理句柄中:request.upload_handlers.insert(0,ProgressBarUploadHandler())你贏使用list.insert()在這種情況下。因?yàn)檫M(jìn)度條處理句柄需要首先執(zhí)行。記住,處理句柄按照順序執(zhí)行。如果你像完全代替掉上傳處理句柄,你可以賦值一個新的列表:request.upload_handlers=[ProgressBarUploadHandler()]注意:你只能在訪問request.POST或者request.FILES之前修改上傳處理句柄?!绻蟼魈幚黹_始后再改就沒用了。如果你在修改reqeust.uplaod_handlers之前訪問了request.POST or request.FILES ,Django將拋出一個錯誤。所以,在你的視圖中盡早的修改上傳處理句柄。

寫自定義的上傳處理句柄:

所有的上傳處理句柄都應(yīng) 是 django.core.files.uploadhandler.FileUploadHandler的子類。你可以在任何你需要的地方定義句柄。需要的方法:

自定義的上傳處理句柄必須定義一下的方法:

FileUploadHandler.receive_data_chunk(self,raw_data,start):從文件上傳中接收塊。

raw_data是已經(jīng)上傳的字節(jié)流

start是raw_data塊開始的位置

你返回的數(shù)據(jù)將被傳遞到下一個處理句柄的receive_data_chunk方法中。這樣一個處理句柄就是另一個的過濾器了。

返回None將阻止后面的處理句柄獲得這個塊,當(dāng)你 自己存儲這個數(shù)據(jù),而不想其他處理句柄存儲拷貝時很有用。

如果你觸發(fā)一個StopUpload或者SkipFile異常,上傳將被放棄或者文件被完全跳過。

FileUploadHandler.file_complete(self, file_size)

當(dāng) 文件上傳完畢時調(diào)用。

處理句柄應(yīng)該返回一個UploadFile對象,可以存儲在request.FILES中。處理句柄也可以返回None來使得UploadFile對象應(yīng)該來自后來的上傳處理句柄。

剩下的就是可選的一些方法實(shí)現(xiàn)。

FILE_UPLOAD_MAX_MEMORY_SIZE = 209715200 FILE_UPLOAD_MAX_MEMORY_SIZE = 209715200

在你本機(jī)先好好測試一下,它是如何占用內(nèi)存,什么時候開始存入temp目錄,怎么遷移到upload目錄底下的

文件上傳的時候,如果一個上傳的文件小于2.5兆,Django會將上傳的東西放在內(nèi)存里,如果上傳的文件大于2.5M,Django將整個上傳的文件寫到一個臨時的文件中,這個文件在臨時文件路徑中。上傳完畢后,將調(diào)用View中的_Upload()方法將臨時文件夾中的臨時文件分塊寫到上傳文件的存放路徑下,每塊的大小為64K,寫完后臨時文件將被刪除。

UploadedFile.multiple_chunks():如果上傳的文件足夠大需要分塊就返回真。默認(rèn)的這個值是2.5兆,當(dāng)然這個值是可以調(diào)節(jié)的,看下面的UploadedFile.chunks():一個產(chǎn)生器,返回文件的塊。如果multiple_chunks()是真的話,你應(yīng)該在一個循環(huán)中使用這個方法,而不是使用read();

在你保存上傳的文件之前,數(shù)據(jù)需要被保存在某些地方。默認(rèn)呢的,如果一個上傳的文件小于2.5兆,Django會將上傳的東西放在內(nèi)存里。這意味著只要從內(nèi)存讀取數(shù)據(jù)并保存到硬盤上,所以很快。然而,如果一個上傳的文件太大,Django將上傳的文件寫到一個臨時的文件中,這個文件在你的臨時文件路徑中。在Unix-like的平臺上意味著你可以預(yù)見Django產(chǎn)生一個文件保存為/tmp/tmpzfp6I6.upload的文件。如果這個文件足夠大,你可以觀察到這個文件的大小在增大。

三個設(shè)置改變Django的上傳處理行為:FILE_UPLOAD_MAX_MEMORY_SIZE:以bytes為單位的到內(nèi)存中的最大大小,。比這個值大的文件將被先存到磁盤上。默認(rèn)是2.5兆FILE_UPLOAD_TEMP_DIR:比FILE_UPLOAD_MAX_MEMORY_SIZE大的文件將被臨時保存的地方。默認(rèn)是系統(tǒng)標(biāo)準(zhǔn)的臨時路徑。FILE_UPLOAD_PERMISSIONS:如果這個沒有給出或者是None,你將獲得獨(dú)立于系統(tǒng)的行為。大多數(shù)平臺,臨時文件有一個0600模式,從內(nèi)存保存的文件將使用系統(tǒng)標(biāo)準(zhǔn)umask。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
在线日韩中文| 51精品视频一区二区三区| 丁香五六月婷婷久久激情| 日韩一区二区三区四区视频| 午夜一区二区三区在线观看| 欧美亚洲另类制服自拍| 成人网在线播放| 亚洲另类春色校园小说| 中文字幕日本视频| 久久视频国产精品免费视频在线| 最新国产热播激情视频| 99国产在线视频| 久久精品国产av一区二区三区| 亚洲国产电影在线观看| 91成人福利在线| 久久人人爽人人爽人人片av高清| 欧美国产欧美综合| 国产熟妇搡bbbb搡bbbb| 国产一区二区三区不卡在线| 亚洲一区二区3| 永久免费观看精品视频| 亚洲欧美激情精品一区二区| 日本人添下边视频免费| 亚洲国产欧美国产综合一区| 国产精品 日产精品 欧美精品| 少妇精品视频在线观看| 亚洲一区中文日韩| 欧美精品在线视频观看| 欧美黑人国产人伦爽爽爽| www.欧美精品一二区| 天天爱天天干天天操| 欧美一区二区影视| 日韩免费在线| 精品av久久久久电影| 日韩在线一区二区三区免费视频| 欧美久久精品午夜青青大伊人| www.久久久精品| 中文字幕亚洲无线码在线一区| 久久免费激情视频| 成人精品aaaa网站| av中文在线观看| 欧美日韩中文一区| 成人在线播放视频| 色婷婷av一区二区三区之e本道| 久久人人精品| 亚洲精品欧美激情| 欧美久久久久免费| 精品国产中文字幕第一页| 国产精品午夜一区二区欲梦| 亚洲香蕉伊综合在人在线视看| 亚洲图区在线| 久久久久久久久久久久91| 黑人精品无码一区二区三区AV| 91免费在线播放视频| 男人午夜影院| 深爱五月激情网| 蜜臀91精品一区二区三区| 偷拍盗摄高潮叫床对白清晰| 亚洲破处大片| 亚洲精品在线二区| av免费在线不卡| 影音先锋5566中文源资源| 免费吸乳羞羞网站视频| 成年人黄色大片在线| 日韩mv欧美mv国产网站| 亚洲国产成人不卡| 国产三级av在线播放| 波多野结衣一区二区三区四区| 少妇视频一区二区| 四虎永久在线精品无码视频| 青青草免费观看完整版高清| 欧美wwwxxxx| 日本免费一区二区三区| 亚洲欧美日韩久久久久久| 亚洲第一精品影视| 国产在线视频卡一卡二| www.av麻豆| 91精品国产高清一区二区三蜜臀| 黄色网页免费看| 4444亚洲人成无码网在线观看| 亚洲最新无码中文字幕久久| 一本久道中文字幕精品亚洲嫩| 91精品韩国| 国产熟女高潮视频| 成人综合影院| 黄色一级片中国| 伊人免费在线观看高清版| 国产xxxxxx| 欧美日韩亚洲综合一区二区三区激情在线| 亚洲中字在线| 欧美精品高清视频| 亚洲欧美三级伦理| 一本色道综合久久欧美日韩精品| 成人情视频高清免费观看电影| 毛片手机在线观看| 亚洲免费黄色录像| 中文字幕在线播放一区| 粉嫩欧美一区二区三区| 成人av免费电影网站| 亚洲日本精品国产第一区| 亚洲国产一区视频| 伊人狠狠av| 91精品xxx在线观看| 99热99这里只有精品| 亚洲综合色av| 超碰影院在线| av中文字幕在线不卡| 在线观看日韩专区| 一区二区在线观看网站| 奇米色777欧美一区二区| 久久影院一区二区| 亚洲第一天堂av| 日本免费在线一区| 伊人国产在线| 99国产精品久久| 少妇视频在线播放| 男人的天堂99| 日韩av成人在线观看| 美女网站免费观看视频| 91精品亚洲一区在线观看| 国产精品96久久久久久| 成人午夜免费在线视频| 日本老太婆做爰视频| 在线视频三级| 日本熟妇一区二区| 美女福利精品视频| 久久久一区二区三区捆绑**| 人人妻人人澡人人爽人人欧美一区| 欧美性生交大片| 国产有码在线| 亚洲va国产日韩欧美精品色婷婷| 欧美激情影音先锋| 99热精品久久| 不卡一区二区在线| 一区二区三区日韩在线| 欧美日韩黄色大片| 在线视频观看国产| 日韩写真福利视频在线| www 日韩| 欧美在线小视频| 欧美中文字幕一二三区视频| 五月婷婷狠狠干| 日本女优北野望在线电影| 日韩福利视频在线| av最新网址| 国产91免费在线观看| 免费看日产一区二区三区| 91精品国自产在线观看| 日本一区二区三区视频在线播放| 亚洲专区在线播放| 一本色道久久综合精品婷婷| 欧美日韩国产综合久久| 视频一区二区欧美| zzijzzij亚洲日本成熟少妇| 免费看一区二区三区| 欧美在线视频不卡| 91色porny在线视频| 国产精品欧美久久| 欧美e片成人在线播放乱妇| 男女激烈动态图| 国产不卡一区二区视频| 深夜视频在线观看| 国产精品网站在线播放| 日韩电影免费观看中文字幕| 亚洲欧美韩国综合色| 超碰在线观看免费版| 日本高清一二三区| 黄色一级影院| 精品国产欧美日韩| 日本精品久久久久久久久久| 欧美小视频在线观看| 日韩深夜影院| 欧美精品一区二区三区在线播放| 成年人免费影院| 日韩一区精品字幕| 精品一区二区三区在线观看| 国模精品视频一区二区三区| 国产高清一区视频| 欧美成a人片免费观看久久五月天| 日本三级亚洲精品| av一区二区在线看| 亚洲国产欧美日韩| 日本aa在线| 日本tube24xxxxx| 久久久久久亚洲精品杨幂换脸| 国产精品欧美一区二区| 91网站免费视频| 男人的天堂久久久| 亚洲国产高清视频| 激情综合激情| 欧美精品色综合| 亚洲国产中文字幕在线观看| 欧美性感美女h网站在线观看免费| 貂蝉被到爽流白浆在线观看| 九九九在线观看视频| 中文字幕在线中文字幕在线中三区| 麻豆国产原创| 黄页网址大全在线播放| 超碰国产精品久久国产精品99| 国产成人精品免高潮在线观看| 国产aⅴ夜夜欢一区二区三区| jiyouzz国产精品久久| 小日子的在线观看免费第8集| 国产精品丝袜久久久久久不卡| 欧美另类videos黑人极品| 天天干天天干天天干| 亚洲婷婷综合久久一本伊一区| 国内视频一区二区| h短视频大全在线观看| www.四虎影视.com| 老熟妇高潮一区二区高清视频| 国产女人18毛片水18精品| 欧美xxxxxxxx| 国产99久久久国产精品| 日韩国产欧美精品一区二区三区| 永久免费毛片在线播放| 黄色一级片一级片| eeuss鲁一区二区三区| 日本中文字幕在线播放| 91精品欧美一区二区三区综合在| 岛国影视在线观看| 激情五月婷婷综合| 国产67194| 性久久久久久久久| 久久99热精品这里久久精品| 欧美黑吊大战白妞| 欧美成人福利| 午夜免费看毛片| 亚洲国产黄色片| 可以免费看污视频的网站在线| 电影一区二区三区| 97香蕉碰碰人妻国产欧美| 黄色一级片网址| 视频精品一区二区三区| 少妇人妻好深好紧精品无码| 日本一本二本在线观看| 天堂资源在线亚洲视频| www日韩av| 一级一片免费视频| 亚洲精品在线影院| 久久综合亚洲精品| 一区二区三区在线高清| 你懂的国产精品| 鬼打鬼之黄金道士1992林正英| 痴汉一区二区三区| 日韩欧美亚洲v片| 性感美女激情视频在线观看| 91福利小视频| 亚洲黄色在线| 日韩国产伦理| 日韩欧美一中文字暮专区| 日韩av电影免费播放| 欧美精品在线一区二区三区| 在线看片成人| 一本色道久久综合狠狠躁篇的优点| 久久五月精品中文字幕| 久久精品美女视频| 久久精品免费播放| 色天下一区二区三区| 岳乳丰满一区二区三区| 熟女俱乐部一区二区| www.国产免费| 亚洲高清不卡在线| 久久免费精品一区二区| 欧洲性xxxx| 国产精品18毛片一区二区| 性欧美ⅴideo另类hd| 亚洲国产精品一区二区www| 91黑丝在线| 国模吧一区二区| 国产又粗又猛又爽又黄av| 国产精品国产三级国产专区53| 素人fc2av清纯18岁| 中文字幕在线视频日韩| 亚洲+变态+欧美+另类+精品| 韩国三级一区| 天天av天天翘天天综合网色鬼国产| 国产高清在线精品一区二区三区| 都市激情一区| 亚洲天天做日日做天天谢日日欢| 日本亚洲一区二区三区| 亚洲精品在线免费观看视频| 日本中文字幕一区二区有限公司| 26uuu久久噜噜噜噜| 成人av一区二区三区在线观看| 欧美激情性爽国产精品17p| 亚洲一区二区三区午夜| 四虎影视永久免费观看| 国产成在线观看免费视频| 国产三级三级在线观看| 美女视频免费精品| 一区二区三区不卡在线视频| 精品国产免费一区二区三区香蕉| mm1313亚洲国产精品无码试看| 精品亚洲国产视频| 日本熟妇人妻中出| 精品一区二区观看| www.久久av.com| 色窝窝无码一区二区三区成人网站| 亚洲国产日韩一区| 亚洲美女自拍视频| 中文字幕中文字幕在线中一区高清| 欧美日韩国产一中文字不卡| 波多野结衣在线观看一区二区三区| 免费成人深夜天涯网站| 国产乱码精品一区二区三区不卡| 精品成人久久av| 欧美人妖在线观看| 奇米777国产一区国产二区| 国产毛片aaa| 国产视频亚洲| www.日本高清视频| 一本一道久久久a久久久精品91| 四虎永久免费地址| 国产精品久久久久久久岛一牛影视| 午夜精品123| 在线欧美福利| www999久久| 国产精品你懂的在线| 免费av片在线观看一道本| av免费播放网站| 福利视频免费在线观看| 欧美日韩精品一区二区三区| 超碰在线成人| ...xxx性欧美| 久久成人资源| 欧美日韩高清在线播放| 91精品高清|