前言

因为前段时间在做一个Excel文件下载功能需求的时候,绕来绕去弄了许久,现在空出时间来总结一下前端实现各种资源下载的方案,以作保存。

使用a标签进行下载

最简单的下载方式是用a标签进行下载,然后设定download为文件名,但是这种方法有一定的局限性,分两种情况,第一种:下载的文件本身在项目文件夹下一般设置了download属性都能够成功下载,当属于这种情况时,使用a标签是最简单方便的方式了;第二种:下载的文件为网络文件,就是一个资源文件,当这个资源文件的文件格式使用浏览器可以直接打开时点击a标签会直接预览文件,当文件格式浏览器不能直接打开时才会触发下载(各个浏览器下载行为有可能不一样)

<a href="./test.txt" download="文件.txt">下载</a>

配合download.js下载各种资源

download.js文档

1、图片下载
图片下载需要先将图片转成base64,这里提供使用canvas转base64方法,在callback里可以获取到base64,拿到base64之后使用download.js进行下载,下载时需要根据下载文件格式设置content-type(content-type对照表)

//链接转base64convertImgToBase64(url, callback, outputFormat) {var canvas = document.createElement("CANVAS"),ctx = canvas.getContext("2d"),img = new Image();img.crossOrigin = "Anonymous";img.onload = function() {canvas.height = img.height;canvas.width = img.width;ctx.drawImage(img, 0, 0);var dataURL = canvas.toDataURL(outputFormat || "image/png");callback.call(this, dataURL);canvas = null;};img.src = url;}

2、视频下载
视频的下载需要提供一个公告可访问的资源链接,在谷歌浏览器下使用video标签,在video控件里有下载按钮,但是根据浏览器不同而有不同表现,有的浏览器可能直接就没有那个下载按钮,如果项目允许的话,直接用原生的下载按钮是最好不过的了,但是有的需求往往就是需要你做一个下载按钮,这种情况的话也可以实现,这里配合axios实现,代码如下

//下载视频downloadVideo(src) {axios({methods: "GET",url: src,responseType: "blob"//设置为blod流}).then(res => {download(res.data, src);//调用download.js}).catch(() => {console.log("视频下载失败");});},

这种方法算比较笨的方法,如果视频比较大的话用户体验不好,如果不是那种只有一个链接的视频,链接资源还不在项目服务器的,才可考虑使用这样的方式,正常情况下视频下载还是交由后端处理比较妥当。

3、post请求下载文件

前段时间,做了一个Excel表格的下载功能,根据上传的字段不同下载的表格不同,本来看起来挺好实现的一个功能,一做才知道,后端给的下载接口请求的是DOC而不是XHR,虽然这种请求接口能够使用form表单action属性进行下载文件,但是这种写法比较麻烦可能需要写多个input,而且DOC请求如果出错后端一般是直接给一个json,也就是说请求失败了浏览器会直接打开一个json文件,这种情况下是不好做异常处理的。因此我又用axios多试了几次,试出了方案,其实和图片的下载差不太多,主要是异常处理那里需要做一些改变,代码如下:

axios({method: 'post',url:src,data: {}
}).then(({ data }) => {if (data.type == "application/json") {console.log("下载失败");return;}download(data,"文件名.xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");});

总结

前端实现下载文件总的来说基本都可以用download.js实现,只要把下载的文件转成支持的格式即可

前端实现各种文件下载相关推荐

  1. 前端二进制流文件下载-Blob操作

    前端如何实现文件下载 前端下载文件的方法有两种, 一种是后端返回下载的URL, 使用 Window.open(URL) 下载, 另一种就是后端直接返回文件的二进制内容,前端做转换再下载. 使用场景 如 ...

  2. 前端js 实现文件下载

    https://www.zhangxinxu.com/wordpress/2017/07/js-text-string-download-as-html-json-file/ 侵删 1.H5 down ...

  3. 前端vue中文件下载的几种方式

    第一种方式是前端创建超链接,通过a标签的链接向后端服务发get请求,接收后端的文件流,非常简单: <a :href='"/user/downloadExcel"' >下 ...

  4. 纯前端实现Excel文件下载

    最近有个模板下载的需求,因为考虑到是静态文件,直接前端做不用后端再写接口,就把文件放在前端,前端实现下载了 <template><div><button @click=& ...

  5. 前端随记---文件下载启用浏览器下载和迅雷下载

    一.前言 最近在写自己的项目时,要实现文件下载功能.然后想起一般在资源网站下载文件的时候,它们都是给出一个资源链接,然后调用浏览器下载或启用外部的程序(如:迅雷下载), 因此想偷个懒,在自己项目中使用 ...

  6. axios下载大文件_前端多线程大文件下载实践,提速10倍(拿捏百度云盘)

    背景 没错,你没有看错,是前端多线程,而不是Node.这一次的探索起源于最近开发中,有遇到视频流相关的开发需求发现了一个特殊的状态码,他的名字叫做 206~ 屏幕快照 2020-09-21 23.21 ...

  7. vue项目前端实现pdf文件下载

    从接口中获取到pdf的url,前台实现下载功能 思路:使用get请求获取到一个二进制流,然后转为Blob,再通过window.URL.createObjectURL()创建一个 DOMString,赋 ...

  8. 前端实现XLSX文件下载

    import XLSX from 'xlsx' downloadTemplate() {const filename = 'template_01.xlsx'const templateData = ...

  9. 后端返回一个url前端怎么把音视频文件下载下来

    后端返回一个url前端怎么把文件下载下来 最近做的项目有一个用腾讯云上传音视频的功能,在后台管理里面需要将音视频下载下来,后端是直接返回腾讯云视频url地址的, // 点击下载文件downloadFi ...

最新文章

  1. Linux 基础学习
  2. python操作mysql数据库依赖包_python安装mysql的依赖包mysql-python操作
  3. 笔记:前端与后台交互
  4. Linux之tcpdump
  5. 什么是集群(cluster)
  6. 周末,说下我喜欢的篮球
  7. @param注解的用法解析_SpringBoot 配置类解析
  8. 在Solaris 下使用Os Watcher 监控Oracle
  9. Pandas timedelta_range
  10. elementUI使用之table表格如何给行元素添加点击事件
  11. 航空公司客户价值分析(python)
  12. JS基础-事件模型(事件事件流自定义事件事件冒泡/代理)
  13. @Param注解的用法
  14. 中国石油大学计算机图形学第一次在线作业,北京交通大学《计算机图形学》20秋在线作业1-001答案...
  15. 盘点2013智能电网行业十大新闻事件
  16. mac文本编辑写html5代码,BBEdit For Mac v13.5.5 专业的的文本和HTML编辑器
  17. 陕西省职业计算机考试试题,2010陕西省计算机等级考试试题 二级C试题最新考试试题库...
  18. 【数字几何处理】参数化:Tutte‘s embeddingLeast Squares Conformal Mappings 源码+介绍
  19. python a股行情_用Python,tushare做一个A股每日收盘行情监测分析(含源代码)
  20. 数说故事车企数字化转型案例——科学分配预算评估社媒营销效果

热门文章

  1. LoveChat独立部署即时通讯IM(前台后台不开源)聊天APP
  2. 用Python画一颗心、小人发射爱心(附源码)
  3. PHP函数实现计算器—加减乘除
  4. 公司电子企业邮箱注册哪个好,电子企业邮箱怎么写?
  5. 【规则】Adblock Plus 广告过滤规则自用整理
  6. 还在纠结程序员能不能干一辈子吗?有答案了!!
  7. 云服务器安装宝塔面板建网站全过程(图文教程)
  8. python量化选股策略 源码_【一点资讯】Python实现行业轮动量化选股【附完整源码】...
  9. centos shell基础 alias 变量单引号 双引号 history 错误重定向 21 jobs 环境变量 .bash_history source配置文件 nohup ...
  10. 【Android】网络小说阅读软件的实现