日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

vue+django實現下載文件的示例

瀏覽:22日期:2022-10-01 17:26:04
一、概述

在項目中,點擊下載按鈕,就可以下載文件。

傳統的下載鏈接一般是get方式,這種鏈接是公開的,可以任意下載。

在實際項目,某些下載鏈接,是私密的。必須使用post方式,傳遞正確的參數,才能下載。

二、django項目

本環境使用django 3.1.5,新建項目download_demo

vue+django實現下載文件的示例

安裝模塊

pip3 install djangorestframework django-cors-headers

修改文件download_demo/settings.py

INSTALLED_APPS = [ ’django.contrib.admin’, ’django.contrib.auth’, ’django.contrib.contenttypes’, ’django.contrib.sessions’, ’django.contrib.messages’, ’django.contrib.staticfiles’, ’api.apps.ApiConfig’, ’corsheaders’, # 注冊應用cors]

注冊中間件

MIDDLEWARE = [ ’django.middleware.security.SecurityMiddleware’, ’django.contrib.sessions.middleware.SessionMiddleware’, ’django.middleware.common.CommonMiddleware’, ’django.middleware.csrf.CsrfViewMiddleware’, ’django.contrib.auth.middleware.AuthenticationMiddleware’, ’django.contrib.messages.middleware.MessageMiddleware’, ’django.middleware.clickjacking.XFrameOptionsMiddleware’, ’corsheaders.middleware.CorsMiddleware’, # 注冊組件cors]

最后一行增加

# 跨域增加忽略CORS_ALLOW_CREDENTIALS = TrueCORS_ORIGIN_ALLOW_ALL = TrueCORS_ALLOW_METHODS = ( ’GET’, ’OPTIONS’, ’PATCH’, ’POST’, ’VIEW’,)CORS_ALLOW_HEADERS = ( ’XMLHttpRequest’, ’X_FILENAME’, ’accept-encoding’, ’authorization’, ’content-type’, ’dnt’, ’origin’, ’user-agent’, ’x-csrftoken’, ’x-requested-with’, ’Pragma’,)

修改download_demo/urls.py

from django.contrib import adminfrom django.urls import pathfrom api import viewsurlpatterns = [ path(’admin/’, admin.site.urls), path(’download/excel/’, views.ExcelFileDownload.as_view()),]

修改api/views.py

from django.shortcuts import render,HttpResponsefrom download_demo import settingsfrom django.utils.encoding import escape_uri_pathfrom django.http import StreamingHttpResponsefrom django.http import JsonResponsefrom rest_framework.views import APIViewfrom rest_framework import statusimport osclass ExcelFileDownload(APIView): def post(self,request): print(request.data) # filename = '大江大河.xlsx' filename = request.data.get('filename') download_file_path = os.path.join(settings.BASE_DIR, 'upload',filename) print('download_file_path',download_file_path) response = self.big_file_download(download_file_path, filename) if response: return response return JsonResponse({’status’: ’HttpResponse’, ’msg’: ’Excel下載失敗’}) def file_iterator(self,file_path, chunk_size=512): ''' 文件生成器,防止文件過大,導致內存溢出 :param file_path: 文件絕對路徑 :param chunk_size: 塊大小 :return: 生成器 ''' with open(file_path, mode=’rb’) as f: while True: c = f.read(chunk_size) if c: yield c else: break def big_file_download(self,download_file_path, filename): try: response = StreamingHttpResponse(self.file_iterator(download_file_path)) # 增加headers response[’Content-Type’] = ’application/octet-stream’ response[’Access-Control-Expose-Headers’] = 'Content-Disposition, Content-Type' response[’Content-Disposition’] = 'attachment; filename={}'.format(escape_uri_path(filename)) return response except Exception: return JsonResponse({’status’: status.HTTP_400_BAD_REQUEST, ’msg’: ’Excel下載失敗’},status=status.HTTP_400_BAD_REQUEST)

在項目根目錄創建upload文件

vue+django實現下載文件的示例

里面放一個excel文件,比如:大江大河.xlsx

三、vue項目

新建一個vue項目,安裝ElementUI 模塊即可。

新建test.vue

<template> <div style='width: 70%;margin-left: 30px;margin-top: 30px;'> <el-button type='success' icon='el-icon-download' @click='downFile()'>下載</el-button> </div></template><script> import axios from ’axios’ export default { data() { return { } }, mounted: function() { }, methods: { downloadFile(url, options = {}){ return new Promise((resolve, reject) => { // console.log(`${url} 請求數據,參數=>`, JSON.stringify(options)) // axios.defaults.headers[’content-type’] = ’application/json;charset=UTF-8’ axios({ method: ’post’, url: url, // 請求地址 data: options, // 參數 responseType: ’blob’ // 表明返回服務器返回的數據類型 }).then( response => { // console.log('下載響應',response) resolve(response.data) let blob = new Blob([response.data], { type: ’application/vnd.ms-excel’ }) // console.log(blob) // let fileName = Date.parse(new Date()) + ’.xlsx’ // 切割出文件名 let fileNameEncode = response.headers[’content-disposition’].split('filename=')[1]; // 解碼 let fileName = decodeURIComponent(fileNameEncode) // console.log('fileName',fileName) if (window.navigator.msSaveOrOpenBlob) { // console.log(2) navigator.msSaveBlob(blob, fileName) } else { // console.log(3) var link = document.createElement(’a’) link.href = window.URL.createObjectURL(blob) link.download = fileName link.click() //釋放內存 window.URL.revokeObjectURL(link.href) } }, err => { reject(err) } ) }) }, // 下載文件 downFile(){ let postUrl= 'http://127.0.0.1:8000/download/excel/' let params = { filename: '大江大河.xlsx', } // console.log('下載參數',params) this.downloadFile(postUrl,params) }, } }</script><style></style>

注意:這里使用post請求,并將filename傳輸給api,用來下載指定的文件。

訪問測試頁面,點擊下載按鈕

vue+django實現下載文件的示例

就會自動下載

vue+django實現下載文件的示例

打開工具欄,查看響應信息

vue+django實現下載文件的示例

這里,就是django返回的文件名,瀏覽器下載保存的文件名,也是這個。

遇到中文,會進行URLcode編碼。

所以在vue代碼中,對Content-Disposition做了切割,得到了文件名。

以上就是vue+django實現下載文件的示例的詳細內容,更多關于vue+django實現下載文件的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲乱码一区| 欧美日韩国产在线一区| 婷婷成人基地| 久久电影tv| 国产精品亚洲四区在线观看| 一区二区三区网站| 99精品99| 欧美日韩视频| 极品日韩av| 尤物tv在线精品| 136国产福利精品导航网址| 午夜精品成人av| 老牛影视精品| 国产资源在线观看入口av| 97精品国产一区二区三区| 国产精品igao视频网网址不卡日韩| 色综合视频一区二区三区日韩 | 理论片午夜视频在线观看| 精品网站999| 久久精品国产免费| 麻豆久久久久久| 久久久久亚洲精品中文字幕| 国产一区二区三区亚洲| 日韩1区2区| 成人亚洲精品| 色偷偷偷在线视频播放| 国产精品精品国产一区二区| 亚洲a级精品| 欧美一级二级三级视频| 69堂精品视频在线播放| 国产福利一区二区三区在线播放| 国产精品v日韩精品v欧美精品网站 | 久久久9色精品国产一区二区三区| 日韩在线视频精品| 91精品韩国| 99久久久久国产精品| 性欧美69xoxoxoxo| 噜噜噜久久亚洲精品国产品小说| 免费成人在线影院| 欧美中文一区| 成人亚洲一区二区| 国产精品99免费看| 亚洲一区二区av| 国产日韩视频在线| 国产一区二区三区亚洲综合| 日韩欧美1区| 91精品推荐| 一区二区三区网站| 美女国产一区二区三区| 日韩理论视频| 视频一区视频二区在线观看| 日韩av网站免费在线| 欧美aa在线视频| 久久黄色影院| 亚洲麻豆一区| 国产精品成人一区二区不卡| 麻豆精品蜜桃| 亚洲欧美成人综合| 不卡专区在线| 丝袜美腿一区二区三区| 免费人成精品欧美精品| 日本一区二区中文字幕| 精品三级av| 亚洲少妇在线| 精品国产美女a久久9999| 日韩电影免费在线观看| 中文字幕亚洲精品乱码| 成人在线黄色| 亚洲最新av| 鲁鲁在线中文| 日韩av一区二区在线影视| 三级小说欧洲区亚洲区| 日韩av电影一区| 亚洲性色视频| 国产麻豆一区二区三区精品视频| 精品国模一区二区三区| 亚欧成人精品| 夜鲁夜鲁夜鲁视频在线播放| 日韩美女精品| 精品成人免费一区二区在线播放| 日韩中文字幕亚洲一区二区va在线| 国产精品第十页| 高清日韩欧美| 亚洲日韩中文字幕一区| 国产一区二区三区天码| 制服诱惑一区二区| 国产情侣久久| 伊人久久婷婷| 国产精品a级| 免费观看久久av| 欧美日韩18| 日韩久久视频| 日韩欧美中文字幕一区二区三区| 成人影视亚洲图片在线| 久久亚洲影院| 国产欧美日韩影院| 久久国产精品成人免费观看的软件| 日本大胆欧美人术艺术动态| 免费在线亚洲| 日韩一区二区三区精品视频第3页| 日本美女一区| 日本a级不卡| 久久男女视频| 国产伦理久久久久久妇女| 日韩一二三区在线观看| 亚洲伦乱视频| 日韩精品一区二区三区中文字幕| 电影91久久久| 国产精品久一| 另类av一区二区| 国产日韩电影| 欧美日韩1区2区3区| 午夜国产欧美理论在线播放 | 亚洲1区在线观看| 亚洲性视频h| 精品视频久久| 婷婷精品在线| 亚洲天堂成人| 午夜电影一区| 日本 国产 欧美色综合| 久久久五月天| 久久亚洲资源中文字| 日韩欧美中文字幕一区二区三区| 美女网站一区| 成人免费一区| 巨乳诱惑日韩免费av| 嫩呦国产一区二区三区av| 中文字幕亚洲影视| 美女毛片一区二区三区四区| 精品久久电影| 精品国产乱码| 欧美在线黄色| 亚洲免费资源| 亚洲国产不卡| 日韩高清中文字幕一区二区| 成人综合一区| 国产一区二区三区四区五区传媒| 婷婷精品久久久久久久久久不卡| 蘑菇福利视频一区播放| 久久中文字幕av| 中文字幕人成乱码在线观看 | 欧美日韩精品免费观看视频完整| 欧美三级网址| 欧美国产日本| 欧美在线不卡| 日韩动漫一区| 天堂精品久久久久| 日韩精品免费观看视频| 天使萌一区二区三区免费观看| 欧美丝袜一区| 免费日本视频一区| 午夜亚洲福利在线老司机| 久久一级电影| 国际精品欧美精品| 国产精品流白浆在线观看| 日韩av中文字幕一区| 欧美a一区二区| 久久精品国产一区二区| 免费亚洲一区| 福利视频一区| 日韩一区自拍| 2023国产精品久久久精品双| 日韩一区电影| 五月激情久久| 日韩中文欧美| 精品一区欧美| 噜噜噜躁狠狠躁狠狠精品视频| 欧美不卡在线| 日韩中文字幕亚洲一区二区va在线| 亚洲欧美网站| 日韩精品第二页| 欧美日韩亚洲三区| 国产精品三级| 国产精品久久观看| 国内精品福利| 免费精品视频| 香蕉久久国产| 老司机精品久久| 日本中文字幕视频一区| 国产精品香蕉| 国产一区丝袜| 99久久激情| 在线午夜精品| 日韩动漫一区| 欧美gv在线| 免播放器亚洲| 日韩不卡在线观看日韩不卡视频| 国产美女精品视频免费播放软件| 精品国产a一区二区三区v免费| 中文在线а√在线8| 久久激情网站| 亚洲丝袜啪啪| 日韩精品免费视频人成| 久久在线91| 日韩精品欧美| 蜜芽一区二区三区| 国产精品久久久久久久久久白浆 | 日本不卡在线视频| 麻豆久久一区| 在线看片福利|