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

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

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

瀏覽:24日期: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久久,三上悠亚国产精品一区二区三区
日韩不卡一区二区三区| 鲁大师精品99久久久| 欧美一区=区| 亚洲精品裸体| 欧美91在线|欧美| 另类中文字幕国产精品| 国内精品99| 中文字幕一区日韩精品| 国产精品一卡| 日本韩国欧美超级黄在线观看| 91九色精品| 日韩av中文字幕一区二区三区| 国产高清视频一区二区| 国内精品麻豆美女在线播放视频| 播放一区二区| 亚洲人亚洲人色久| 欧美国产中文高清| 久久久久久久久99精品大| 蜜臀av性久久久久蜜臀aⅴ流畅 | 日韩欧美另类中文字幕| 欧美激情一区| 欧美+日本+国产+在线a∨观看| 亚洲精品人人| 成人小电影网站| 亚洲毛片在线免费| 欧美激情日韩| 久久国产99| 国产a亚洲精品| 亚洲一区二区三区高清| 国产免费av国片精品草莓男男| 色88888久久久久久影院| 亚洲精品系列| 久久婷婷丁香| 国产九一精品| 亚洲一区成人| 色偷偷色偷偷色偷偷在线视频| 亚洲综合中文| 日韩影院二区| 国产精品资源| 欧美专区在线| 久久97视频| 中文字幕中文字幕精品| 九九色在线视频| 国产精品日本一区二区三区在线| 欧美日韩四区| 91综合网人人| 久久国产视频网| 国产一区二区高清| а√天堂8资源在线| 综合色一区二区| 久久久亚洲一区| 国产高清亚洲| 日韩欧美中文字幕一区二区三区 | 男女男精品网站| 在线手机中文字幕| 欧美永久精品| 三级一区在线视频先锋| 偷拍精品精品一区二区三区| 国产精品一页| 亚洲男人在线| 久久成人亚洲| 欧美va亚洲va日韩∨a综合色| 精品一区视频| 欧美一区不卡| 视频一区欧美日韩| 一区久久精品| 中文字幕在线官网| 久久av电影| 日韩福利在线观看| 免费观看久久久4p| 激情婷婷综合| 四虎影视精品| 老牛影视精品| 精品国产亚洲一区二区三区在线| 日韩动漫一区| 亚洲人成亚洲精品| 热久久免费视频| 影院欧美亚洲| 蜜桃tv一区二区三区| 亚洲成人不卡| 日韩免费小视频| 国产一区三区在线播放| 国产乱码精品一区二区三区亚洲人 | 精品一区二区三区中文字幕| 国产欧美日韩在线一区二区 | 国产福利片在线观看| 久久久国产精品网站| 久久激情五月婷婷| 日韩精品欧美成人高清一区二区| 蜜桃久久精品一区二区| 日韩精品一级中文字幕精品视频免费观看 | 精品国产亚洲一区二区三区大结局| 日韩av中文字幕一区二区| 亚洲精品日韩久久| 中文字幕av一区二区三区四区| 性欧美69xoxoxoxo| 99riav1国产精品视频| 合欧美一区二区三区| 亚洲激情黄色| 先锋影音国产一区| 免费日韩视频| 蜜桃一区二区三区在线观看| 水野朝阳av一区二区三区| 亚洲神马久久| 视频一区二区中文字幕| 亚洲日产国产精品| 日本色综合中文字幕| 欧美亚洲色图校园春色| 国产精品亚洲四区在线观看| 国产精品亚洲综合久久| 精品一区二区三区中文字幕在线| 国产66精品| 91tv亚洲精品香蕉国产一区| 久久精品播放| 国产亚洲精品v| 亚洲青青久久| 久久精品xxxxx| 久久免费视频66| av中文字幕在线观看第一页| 三级精品视频| 日韩在线一二三区| 欧美在线看片| 成人在线视频区| 欧美日韩一二| 国产精品免费看| 91国内精品| 久久毛片亚洲| 免费日韩视频| 国产精品乱战久久久| 福利视频一区| 亚洲福利精品| 亚洲一区二区免费在线观看| 国产视频一区二区在线播放| 福利在线免费视频| 黄色亚洲大片免费在线观看| 日韩精品免费视频人成| 国产一区二区三区亚洲综合| 欧美性感美女一区二区| 亚洲图片久久| 精品国产亚洲一区二区三区大结局 | 视频一区二区三区在线| 国产精品亚洲欧美一级在线| 国产亚洲一区二区手机在线观看 | 国产精品视频一区二区三区综合| 裤袜国产欧美精品一区| 中文日韩欧美| 国产日韩欧美在线播放不卡| 日韩伦理在线一区| 免费观看久久久4p| 美女在线视频一区| 国产主播一区| 欧美日韩中文| 日韩精品欧美| 日韩激情av在线| 国产成人精品一区二区免费看京| 国产视频一区三区| 另类欧美日韩国产在线| 一本一道久久a久久精品蜜桃| 欧美日韩 国产精品| 久久国产日韩| 国产亚洲观看| 婷婷精品进入| 免费在线观看一区| 国产手机视频一区二区| 国产精品扒开腿做爽爽爽软件| 久久亚洲精品中文字幕蜜潮电影| 日韩精品亚洲aⅴ在线影院| 日韩av福利| 欧美在线黄色| 欧美精品一区二区三区精品| 国产精品资源| 亚洲欧美成人综合| 国产一区二区三区日韩精品 | 首页国产精品| 亚州av一区| 1000部精品久久久久久久久| 国产精选久久| 在线亚洲自拍| 日韩欧美看国产| 国产精品1区在线| 视频一区二区三区入口| 精品捆绑调教一区二区三区| 欧美日韩一区自拍| av成人国产| 久久uomeier| 国产精品一级| 亚洲精品自拍| 好看的亚洲午夜视频在线| 丁香六月综合| 国产福利亚洲| 亚洲欧美网站在线观看| 欧美成人久久| 精品一区二区男人吃奶| 日本不卡不码高清免费观看 | 精品美女在线视频| 日韩和欧美的一区| 国产视频一区在线观看一区免费| 日韩黄色大片| 久久精品国产在热久久| 日韩av一二三|