介绍一、概述
二,django项目
这篇文章将为大家详细讲解有关怎么在vue中使用django实现一个文件下载功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
一、概述
在项目中,点击下载按钮,就可以下载文件。
传统的下载链接一般是得到方式,这种链接是公开的,可以任意下载。
在实际项目,某些下载链接,是私密的。必须使用发布方式,传递正确的参数,才能下载。
二,django项目
本环境使用django 3.1.5,新建项目download_demo
安装模块
pip3 install djangorestframework django-cors-headers
修改文件download_demo/设置。py
INSTALLED_APPS =, ( ,& # 39;django.contrib.admin& # 39; ,& # 39;django.contrib.auth& # 39; ,& # 39;django.contrib.contenttypes& # 39; ,& # 39;django.contrib.sessions& # 39; ,& # 39;django.contrib.messages& # 39; ,& # 39;django.contrib.staticfiles& # 39; ,& # 39;api.apps.ApiConfig& # 39; ,& # 39;corsheaders& # 39;,, #,注册应用歌珥 )
注册中间件
MIDDLEWARE =, ( ,& # 39;django.middleware.security.SecurityMiddleware& # 39; ,& # 39;django.contrib.sessions.middleware.SessionMiddleware& # 39; ,& # 39;django.middleware.common.CommonMiddleware& # 39; ,& # 39;django.middleware.csrf.CsrfViewMiddleware& # 39; ,& # 39;django.contrib.auth.middleware.AuthenticationMiddleware& # 39; ,& # 39;django.contrib.messages.middleware.MessageMiddleware& # 39; ,& # 39;django.middleware.clickjacking.XFrameOptionsMiddleware& # 39; ,& # 39;corsheaders.middleware.CorsMiddleware& # 39;,, #,注册组件歌珥 )
最后一行增加
#,跨域增加忽略 CORS_ALLOW_CREDENTIALS =,真的 CORS_ORIGIN_ALLOW_ALL =,真的 CORS_ALLOW_METHODS =, ( ,& # 39;得到# 39; ,& # 39;选项# 39; ,& # 39;补丁# 39; ,& # 39;文章# 39; ,& # 39;视图# 39; ) CORS_ALLOW_HEADERS =, ( ,& # 39;xmlhttprequest # 39; ,& # 39;X_FILENAME& # 39; ,& # 39;accept-encoding& # 39; ,& # 39;授权# 39; ,& # 39;内容类型# 39; ,& # 39;dnt # 39; ,& # 39;起源# 39; ,& # 39;用户代理# 39; ,& # 39;x-csrftoken& # 39; ,& # 39;x-requested-with& # 39; ,& # 39;编译指示# 39; )
修改download_demo/url。py
得到django.contrib import 管理 得到django.urls import 路径 得到api import 视图 urlpatterns =, ( ,路径(& # 39;管理/& # 39;,,admin.site.urls), ,路径(& # 39;下载/excel/& # 39;,, views.ExcelFileDownload.as_view ()), )
修改api/观点。py
得到django.shortcuts import HttpResponse渲染 得到download_demo import 设置 得到django.utils.encoding import  escape_uri_path 得到django.http import  StreamingHttpResponse 得到django.http import  JsonResponse 得到rest_framework.views import  APIView 得到rest_framework import 状态 import 操作系统 class ExcelFileDownload (APIView): 帖子,def (自我,要求): 打印(request.data)才能 #,才能filename =,“大江大河.xlsx" 时间=filename 才能;request.data.get (“filename") download_file_path 才能=,os.path.join (settings.BASE_DIR,“upload",文件名) 打印才能(“download_file_path" download_file_path) 时间=response 才能;self.big_file_download (download_file_path,文件名) if 才能回应: ,,return 响应 return 才能;JsonResponse({& # 39;状态# 39;:,& # 39;httpresponse # 39;,, & # 39;味精# 39;:,& # 39;Excel下载失败& # 39;}) ,def file_iterator(自我、file_path, chunk_size=512): “才能”;“ 文才能件生成器,防止文件过大,导致内存溢出 :才能param file_path:,文件绝对路径 :才能param chunk_size:,块大小 ,,:返回:生成器 “才能”;“ with 才能;开放(file_path,,模式=& # 39;rb # 39;), as f: ,,while 真正的: ,,,c =, f.read (chunk_size) ,,,if c: ,,,,油品收率c ,,,: ,,,,休息 ,def big_file_download(自我、download_file_path,文件名): 尝试才能: ,,response =, StreamingHttpResponse (self.file_iterator (download_file_path)) ,,#,增加头 ,,反应[& # 39;内容类型# 39;],=,& # 39;应用程序/八进制# 39; ,才能响应[& # 39;Access-Control-Expose-Headers& # 39;],=,“附加项,,Content-Type" ,,反应[& # 39;附加# 39;],=,“附件;,文件名={}“.format (escape_uri_path(文件名) ,,return 响应 except 才能;例外: null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null怎么在vue中使用django实现一个文件下载功能