中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django實現文件上傳下載

發布時間:2020-09-18 21:37:34 來源:腳本之家 閱讀:274 作者:Mr丶佳少丶 欄目:開發技術

本文實例為大家分享了Django實現文件上傳下載的具體代碼,供大家參考,具體內容如下

一、django實現文件下載

(1)、后臺接口

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

①、最簡單的文件下載功能的實現,直接將文件流放入HttpResponse對象即可

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

這種方式簡單粗暴,適合小文件的下載,但如果這個文件非常大,這種方式會占用大量的內存,甚至導致服務器崩潰

②、更合理的文件下載

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

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

③、再次優化

上述的代碼,已經完成了將服務器上的文件,通過文件流傳輸到瀏覽器,但文件流通常會以亂碼形式顯示到瀏覽器中,而非下載到硬盤上,因此,還要在做點優化,讓文件流寫入硬盤。優化很簡單,給StreamingHttpResponse對象的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)、前臺展示

①、使用a標簽直接訪問到上面的視圖函數配置好的url即可

②、使用button,或者其他標簽

使用js觸發點擊事件,代碼如下:

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

二 文件上傳

(1)、前臺表單,使用表單的方式進行文件的上傳

<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)、后臺接收,這是接收圖片的代碼,其他文件類似

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兰溪市| 上饶市| 大悟县| 濮阳市| 忻州市| 建湖县| 潮州市| 荣昌县| 绵阳市| 望城县| 广饶县| 五大连池市| 宜兰市| 呼图壁县| 沐川县| 贵南县| 台山市| 安溪县| 阿坝县| 乐陵市| 宁夏| 黑龙江省| 濮阳市| 五大连池市| 义马市| 永城市| 巴东县| 东山县| 沙河市| 新巴尔虎左旗| 攀枝花市| 古丈县| 务川| 西安市| 彭州市| 宽城| 奉节县| 大余县| 体育| 商丘市| 鹿泉市|