前端下载文件的几种方式

  • 前言
    • 1. window.open
    • 2. window.location.href
    • 3. a标签
    • 4. iframe
    • 5. blob

前言

总结下载文件的几种方式,文件都是通过接口获取的,前端通过调用接口将接口返回的文件下载。
文件下载的方式的选择主要考虑以下几个方面:
1. 接口使用的是post请求还是get请求
2. 接口返回的是文件流还是下载的文件路由
3. 是否打开新窗口
主要是想记录一些我在实际有用到过的一些方式,欢迎补充交流

1. window.open

适用于get请求

window.open(url)

2. window.location.href

适用于get请求

window.location.href = url;

3. a标签

适用于get请求

/**
*  通过 a标签下载文件
* @param url 文件的链接
*/
export function use_a_download(url) {const link = document.createElement('a');document.body.appendChild($a);link.href = url;link.download = 'download';link.click();setTimeout(() => {if (link.remove) {link.remove();} else if (link.removeNode) {link.removeNode();}}, 20000);
}
存在的问题:1. 浏览器会直接打开图片类型和txt类型的文件而不是下载2. 跨域时,download属性失效,无法对下载的文件重命名,默认为访问路径的名字。

4. iframe

  /*** 通过 iframe 下载文件* @param url 文件的链接*/
export function use_iframe_download(url) {const $iframe = document.createElement('iframe');$iframe.style.height = '0px';$iframe.style.width = '0px';document.body.appendChild($iframe);$iframe.setAttribute('src', url);setTimeout(() => {if ($iframe.remove) {$iframe.remove();} else if ($iframe.removeNode) {$iframe.removeNode();}}, 20000);
}

5. blob

适用于get/post请求,可以传参

/**
* post请求导出列表
* @param url 访问路由
* @param data 接口参数,数组
* @param fileName 导出文件名
* @param formatStr 日期格式化
* @param method 请求类型
*/
export function use_blob_download(url, data, fileName, formatStr,method = 'post') {
axios({method,url,data,responseType: 'blob'
}).then(res => {const link = document.createElement('a');let blob = new Blob([res.data]);link.style.display = 'none';link.href = URL.createObjectURL(blob);link.setAttribute('download', fileName + new Date().format(formatStr) + '.xls');document.body.appendChild(link);link.click();document.body.removeChild(link);
});
}
存在的问题:跨域

前端下载文件的几种方式相关推荐

  1. vue前端下载文件的2种方式

    以下两种方式下载适用于后端返回了文件的url下载地址 var x = new XMLHttpRequest();x.open("GET", url, true);//url为文件的 ...

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

    前端经常需要通过后端给的文件流下载各种文件,比如excel,word,压缩包等 方式一:使用 window.location.href 这里限于使用get方式 window.location.href ...

  3. Web前端下载文件的几种常见方式

    1 标签or点击事件 标签下载 <a href="xxxxx"> 或 <a href="xxxxx" download="xxxx& ...

  4. java 文件下载详解_Java 从网上下载文件的几种方式实例代码详解

    废话不多说了,直接给大家贴代码了,具体代码如下所示: package com.github.pandafang.tool; import java.io.BufferedOutputStream; i ...

  5. python 下载文件-Python下载文件的11种方式

    原标题:Python下载文件的11种方式 在本教程中,你将学习如何使用不同的Python模块从web下载文件.此外,你将下载常规文件.web页面.Amazon S3和其他资源. 最后,你将学习如何克服 ...

  6. Java下载文件的几种方式

    public HttpServletResponse download(String path, HttpServletResponse response) {try {// path是指欲下载的文件 ...

  7. Windows从web下载文件的几种方式

    最近搞app自动化测试,需要自动从网页上下载apk用于测试,顺便学习了几种从web下载文件的方式. 一.PowerShell DownloadFile 命令 PowerShell 是一种winodws ...

  8. 前端js文件合并三种方式

    最近在思考前端js文件该如何合并,当然不包括不能合并文件,而是我们能合并的文件,想了想应该也只有三种方式. 三个方式如下: 1. 一个大文件,所有js合并成一个大文件,所有页面都引用它. 2. 各个页 ...

  9. springboot Java实现多文件的zip压缩操作 + 通过浏览器下载文件的两种方式

    注只适配utf-8的场景,待完善! 压缩为zip文件 通过java程序输出文件 /*** 功能:压缩多个文件成一个zip文件* @param srcfile:源文件列表* @param zipfile ...

最新文章

  1. php laravel 环境搭建
  2. 安卓程序员永远不懂iOS程序员的痛? | 每日趣闻
  3. go与JAVA差异_20190312_浅谈gojava差异(二)
  4. 学堂在线计算机挂了咋办,各位师兄师姐我想问下计算机挂了是直接重修吗(#泪)...
  5. XAMPP修改80和443端口及创建虚拟目录
  6. grid++中打印表格时怎么让每页有打印表头_一张表学习EXCEL(七):打印也有方法...
  7. python数码管应用到物流_使用Python,实现程序运行计时的数码管表示
  8. [Go] 函数/方法 的 变参
  9. 查找java实现_常见查找算法Java实现
  10. IBM X3650优盘启动
  11. OSN3500设备PSXCS单板的工作原理和信号流
  12. 【Flutter--实战】Dart 语言快速入门
  13. 弹性计算的内部概念:弹性扩张、弹性收缩、弹性自愈
  14. win7搭建VM10虚拟机,搭建win7旗舰版64系统
  15. Hark的数据结构与算法练习之冒泡排序
  16. 迁移TFS,批量将文档导入SharePoint 2013 文档库
  17. 西游记笔记与想法(4)
  18. JAVA程序员如何快速写一个QQ机器人?
  19. 微信浏览器 MP4播放失败,安卓下微信浏览器不能播放MP4问题的解决,gzip捣的鬼
  20. Python王者荣耀皮肤批量下载

热门文章

  1. win7 32位与64位下载地址存档
  2. 3个最佳的视频播放器
  3. 成功解决在word文件的表格中当输文字时自动出现加红色和下划线
  4. mysql查询分数前三个_MySql根据总成绩查询前三名学生的每科成绩分数
  5. 联想微型计算机开机黑屏什么原因,联想笔记本电脑开机黑屏是什么原因
  6. Dest0g3 520迎新赛WEB 无java部分 wp
  7. [机缘参悟-78]:深度思考-职场中注意事项与大忌-员工版
  8. MT6739 PDAF移植
  9. 动力节点-javaweb项目入门到实战教程-上
  10. 人脸识别接口_今天你刷脸了吗?启扬智能人脸识别解决方案