怎么在vue中使用django实现一个文件下载功能

  介绍

这篇文章将为大家详细讲解有关怎么在vue中使用django实现一个文件下载功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

一、概述

在项目中,点击下载按钮,就可以下载文件。

传统的下载链接一般是得到方式,这种链接是公开的,可以任意下载。

在实际项目,某些下载链接,是私密的。必须使用发布方式,传递正确的参数,才能下载。

二,django项目

本环境使用django 3.1.5,新建项目download_demo

怎么在vue中使用django实现一个文件下载功能

安装模块

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实现一个文件下载功能