欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django實(shí)現(xiàn)文件上傳下載

 更新時(shí)間:2019年10月06日 10:59:32   作者:Mr丶佳少丶  
這篇文章主要為大家詳細(xì)介紹了Django實(shí)現(xiàn)文件上傳下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Django實(shí)現(xiàn)文件上傳下載的具體代碼,供大家參考,具體內(nèi)容如下

一、django實(shí)現(xiàn)文件下載

(1)、后臺(tái)接口

如果從服務(wù)器直接將文件路徑傳給瀏覽器,普通文件可以直接下載,而圖片,html,css和pdf格式等文件會(huì)直接顯示,所以解決辦法就是在頭文件中讓文件流寫入硬盤.

①、最簡單的文件下載功能的實(shí)現(xiàn),直接將文件流放入HttpResponse對(duì)象即可

def file_download(request):
 # do something...
 with open('file_name.txt') as f:
  c = f.read()
 return HttpResponse(c)

這種方式簡單粗暴,適合小文件的下載,但如果這個(gè)文件非常大,這種方式會(huì)占用大量的內(nèi)存,甚至導(dǎo)致服務(wù)器崩潰

②、更合理的文件下載

Django的HttpResponse對(duì)象運(yùn)行將迭代器作為傳入?yún)?shù),將上面代碼中的傳入?yún)?shù)c換成一個(gè)迭代器,便可以將上述下載功能優(yōu)化為對(duì)大小文件均適合;而Django更進(jìn)一步,推薦使用 StreamingHttpResponse對(duì)象取代HttpResponse對(duì)象,StreamingHttpResponse對(duì)象用于將文件流發(fā)送給瀏覽器,與HttpResponse對(duì)象非常相似,對(duì)于文件下載功能,使用StreamingHttpResponse對(duì)象更合理。因此,更加合理的文件下載功能,應(yīng)該先寫一個(gè)迭代器,用于處理文件,然后將這個(gè)迭代器作為參數(shù)傳遞給StreaminghttpResponse對(duì)象,如:

from django.http import StreamingHttpResponse
 
def big_file_download(request):
 # do something...
 
 def file_iterator(file_name, chunk_size=512):
  with open(file_name) as f:
   while True:
    c = f.read(chunk_size)
    if c:
     yield c
    else:
     break
 
 the_file_name = "file_name.txt"
 response = StreamingHttpResponse(file_iterator(the_file_name))
 
 return response

③、再次優(yōu)化

上述的代碼,已經(jīng)完成了將服務(wù)器上的文件,通過文件流傳輸?shù)綖g覽器,但文件流通常會(huì)以亂碼形式顯示到瀏覽器中,而非下載到硬盤上,因此,還要在做點(diǎn)優(yōu)化,讓文件流寫入硬盤。優(yōu)化很簡單,給StreamingHttpResponse對(duì)象的Content-Type和Content-Disposition字段賦下面的值即可

from django.http import StreamingHttpResponse
 
def big_file_download(request):
 # do something...
 
 def file_iterator(file_name, chunk_size=512):
  with open(file_name) as f:
   while True:
    c = f.read(chunk_size)
    if c:
     yield c
    else:
     break
 
 the_file_name = "big_file.pdf"
 response = StreamingHttpResponse(file_iterator(the_file_name))
 response['Content-Type'] = 'application/octet-stream'
 response['Content-Disposition'] = 'attachment;filename="{0}"'.format(the_file_name)
 
 return response

(2)、前臺(tái)展示

①、使用a標(biāo)簽直接訪問到上面的視圖函數(shù)配置好的url即可

②、使用button,或者其他標(biāo)簽

使用js觸發(fā)點(diǎn)擊事件,代碼如下:

$("body").on("click",".buttonimgdown",function(){
 alert($(".hiddenshiyan").val());
 location.href="/downloadFile/?url=" rel="external nofollow" +$(".hiddenshiyan").val();
});

二 文件上傳

(1)、前臺(tái)表單,使用表單的方式進(jìn)行文件的上傳

<form enctype="multipart/form-data" action="./upload" method="post">
<p>File: <input type="file" name="file"></p>
<p><input type="submit" value="Upload"></p>
</form>

(2)、后臺(tái)接收,這是接收?qǐng)D片的代碼,其他文件類似

def addOnepicture(req):
rollpicturePath=os.path.join(basePath,rollpictureName)
reqfile = req.FILES['picfile']
img = Image.open(reqfile)
img.thumbnail((500,500),Image.ANTIALIAS)#對(duì)圖片進(jìn)行等比縮放
img.save(rollpicturePath,"png")#保存圖片
T_Picture.objects.create(<u>...</u>)

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Numpy中的shape、reshape函數(shù)的區(qū)別

    Numpy中的shape、reshape函數(shù)的區(qū)別

    本文主要介紹了Numpy中的shape、reshape函數(shù)的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • opencv實(shí)現(xiàn)文檔矯正

    opencv實(shí)現(xiàn)文檔矯正

    這篇文章主要為大家詳細(xì)介紹了opencv實(shí)現(xiàn)文檔矯正功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • python numpy庫np.percentile用法說明

    python numpy庫np.percentile用法說明

    這篇文章主要介紹了python numpy庫np.percentile用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python xpath表達(dá)式如何實(shí)現(xiàn)數(shù)據(jù)處理

    Python xpath表達(dá)式如何實(shí)現(xiàn)數(shù)據(jù)處理

    這篇文章主要介紹了Python xpath表達(dá)式如何實(shí)現(xiàn)數(shù)據(jù)處理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Tensorflow Summary用法學(xué)習(xí)筆記

    Tensorflow Summary用法學(xué)習(xí)筆記

    這篇文章主要介紹了Tensorflow Summary用法學(xué)習(xí)筆記,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • python函數(shù)返回多個(gè)值的示例方法

    python函數(shù)返回多個(gè)值的示例方法

    這篇文章主要介紹了python函數(shù)返回多個(gè)值的方法,大家參考使用
    2013-12-12
  • python游戲的魅力之冒險(xiǎn)島實(shí)戰(zhàn)項(xiàng)目

    python游戲的魅力之冒險(xiǎn)島實(shí)戰(zhàn)項(xiàng)目

    我看了一眼沉迷《夢(mèng)幻國度》的兒子!氣就不打一處來!讓你見識(shí)一下Python游戲的魅力,python實(shí)戰(zhàn)冒險(xiǎn)島游戲碼起,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值
    2021-09-09
  • 利用Python實(shí)現(xiàn)Json序列化庫的方法步驟

    利用Python實(shí)現(xiàn)Json序列化庫的方法步驟

    這篇文章主要給大家介紹了關(guān)于利用Python實(shí)現(xiàn)Json序列化庫的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • python pygame入門教程

    python pygame入門教程

    pygame是python的游戲編程模塊,今天我們就來一起簡單的學(xué)習(xí)如何使用該模塊
    2021-06-06
  • python 成功引入包但無法正常調(diào)用的解決

    python 成功引入包但無法正常調(diào)用的解決

    這篇文章主要介紹了python 成功引入包但無法正常調(diào)用的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03

最新評(píng)論