前端实现下载文件的方法汇总

这篇具有很好参考价值的文章主要介绍了前端实现下载文件的方法汇总。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


摘要

对于前端来说,下载文件是一个特别常见的需求。但是前端要根据后端返回的内容,来选择下载文件的具体方法。通常情况下,后端要么给你返回文件的网络地址,要么返回文件流。返回地址一般用在静态文件上,比如图片和音视频资源等;返回文件流一般用在动态文件上,前端传入参数,后端返回不同的excel统计表等。


一、后端返回文件地址

1. a标签

<a href="http://xxx.docx">下载文件</a>

通过download属性可以修改文件名(前提:href指定的地址必须是同源路径,否则无效)

<a href="xxx" download="自定义文件名.doc">下载文件</a>

2. 指定location的href属性

<!-- html -->
<div @click="downloadFile">下载文件</div>
// js
function downloadFile(){
	location.href = "http://xxx.doc";
}

3. window.open

window.open("http://xxx.doc","_self"); 

_self – 在当前窗口打开链接
_blank – 默认的,在新窗口打开链接

4. download.js*

使用以上三种方法,如果是图片、视频、pdf 等格式的文件会直接在浏览器预览,而不是像 docx 、xlsx 一样直接下载。download.js则可以不区分文件格式,全部实现下载。

1)下载

yarn add downloadjs

2)在main.js中引入downloadjs,全局注册download方法

import download from "downloadjs";
Vue.prototype.$download = download;

3)使用

this.$download(url, name);

二、后端返回文件流

1. axios

1)在响应拦截器里书写下载文件的逻辑

响应头需要后端配合设置,不同的数据格式,返回的响应头不一样

// request.js
axios.interceptors.response.use((response) => {
	// 通过响应头判断是否需要下载文件
    if (['application/x-msdownload;charset=utf-8', 'application/vnd.ms-excel'].includes(response.headers['content-type'])) {
        const blob = new Blob([response.data], {
            type: "application/octet-stream; charset=utf-8"
        });
        let filename = decodeURIComponent(response.headers['filename']);
        const link = document.createElement('a');
        link.style.display = 'none';
        link.download = filename;
        link.href = URL.createObjectURL(blob);
        document.body.appendChild(link);
        link.click();
        URL.revokeObjectURL(link.href);
        document.body.removeChild(link);
        return;
    }
}

2)新建api.js,封装请求

// api.js
export function downloadFile(query) {
    return request({
        url: '/general/general/downloadFile',
        method: 'get',
        params: query,
        responseType: "blob"
    })
}

3)使用

<!-- html -->
<div @click="downloadDoc(item)">下载</div>
// js
downloadDoc(file) {
   downloadFile({ name: file.name, url: file.url }).then(() => {});
},

2. file-saver

1)安装依赖包

npm install file-saver --save

2)创建一个文件file.js,封装下载文件的方法

import request from '@/common/js/request'// 封装后的axios请求
import {saveAs} from 'file-saver'// saveAs --下载文件的API

export const downloadExcel = (query, fileName) => {
	request({
        url: '/general/downloadFile',
        method: 'get',
        params: query,
        responseType: "blob"
    }).then(fileStream => {
    	const blob = new Blob([fileStream],{ type: 'application/vnd.ms-excel' });
    	saveAs(blob, fileName + '.xlsx'); //注意:文件名需要携带后缀
    })
}

3)使用文章来源地址https://www.toymoban.com/news/detail-491388.html

<!-- html -->
<div
  v-for="(item, i) in dialogForm.reportUrl"
  :key="'file-item' + i"
  @click="downloadDoc(item)"
  class="file-item"
>
  {{ item.name }}
</div>
// js
downloadDoc(item) {
    downloadExcel ({ id: item.id },item.name).then(() => {});
}

到了这里,关于前端实现下载文件的方法汇总的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【前端】下载文件方法

    我最初使用的方法就是这个,只要提供了文件的服务器地址,使用 window.open 也就是在新窗口打开,这时浏览器会自动执行下载。 其实window.open和a标签是一样的,只是a标签是要用户点击触发,而window.open可以主动触发 后端如果设置了Content-Disposition ,那么不需要download属性也能

    2024年01月24日
    浏览(28)
  • 【前端文件下载】直接下载和在浏览器显示下载进度的下载方法

    之前做下载文件遇到了点问题, 就趁此机会总结一下前端下载文件的方法: 如果是浏览器支持的类型, 那么打开的话是一个preview操作, 那么针对浏览器不支持预览的类型, 如果打开的话就会进行下载操作 a. 地址栏直接输入URL b. window.location.href = URL c. window.open(URL) 使用a标签来下载

    2024年02月05日
    浏览(28)
  • 前端文件下载方法(包含get和post)

    2024年01月15日
    浏览(31)
  • 前端实现文件下载功能——文件流

    前端下载文件一般使用的是blob 核心的步骤是获取后端响应的文件流,用blob创建一个临时的URL,然后创建一个隐藏的a标签,实现下载需求。 那就先上代码 如果后端响应的数据是一个二进制数据,那我们就得这是响应类型是blob,否则浏览器会默认按照json解析 至于后端如何向

    2024年02月11日
    浏览(35)
  • 前端发送请求获取后端文件,并且前端实现下载文件功能

    最近遇到一个需求,就是前端发送post请求获取后端的excel文件,并且前端实现下载导出到本地的功能。 前端页面就长上面那样,一个批量导出功能,用户勾选之后,前端通过接口把id和其他的参数传给后端,接口调用方法这里需要注意的是,这里必须设置responseType: ‘blob’

    2024年02月09日
    浏览(32)
  • 前端实现下载文件的各种方式

    前端涉及到的文件下载还是很多应用场景的,那么前端文件下载有多少种方式呢?每种方式有什么优缺点呢?下面就来一一介绍。 通过 a 标签的 download 属性来实现文件下载,这种方式是最简单的,也是我们比较常用的方式,先来看示例代码: 就上面的这个示例,我们点击下

    2024年02月16日
    浏览(36)
  • 【Java 实现文件下载】vue前端+java后端实现文件下载详解(附源码)

    【 写在前面 】前端时间总结了一下有关java文件上传的功能,也给不少读者带来一些帮助,因此今天继续完善文件下载这套体系,希望能给屏幕前的您带来实质性的帮助,其实文件下载最怕的就是中文乱码的现象,当然这个我单独写了一篇文章解释,这里不做详谈。 涉及知识

    2024年02月09日
    浏览(33)
  • windows.open 在vue前端实现文件下载(自定义下载文件名)

    1. 将要下载的文件放在前端项目的 assets 文件夹内  我要下载的文件为  src/assrts/xxx/xxx模板.csv  2. 在页面创建下载按钮    3. 导入该文件 4. 在build文件夹下的webpack.base.conf.js 文件中,添加csv(或者其他)解析类型 5. 编写下载方法 参考自:vue 实现本地excel文件下载功能_璐哈

    2024年02月05日
    浏览(39)
  • 【前端下载文件流详解】前端实现多种类型文件(word,excel,pdf,rar,zip等)的下载,接口返回文件流形式(附源码)

    【 写在前面 】其实之前我也写了有关java实现文件的下载,但是当时是局限于excel文档,针对其他类型的并没有介绍,这次刚好有个客户现场反馈回来的,说我们系统确实能下载报告,但是甲方领导要看所有的报告,这不我每天得一个一个的点击下载,然后再打包给他们领导

    2023年04月24日
    浏览(42)
  • vue下载pdf文件纯前端实现,不跳页面实现

    一、引入download.js npm install downloadjs 地址:https://www.npmjs.com/package/downloadjs 注意:使用download.js时下载的文件内容为该文件的url(url和filename参数有中文的话下载后的文件会损坏打不开,需要修改源码) 二、复制一份下载好的downloadjs 文件 , 修改后的源码

    2024年02月12日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包