前端如何下载后端传输的文件

前端下载后端传回的文件有三种方式

  1. 直接打开下载地址:这种无法命名,只适用于get直接返回blob的接口
  2. 利用a标签的download:这种是比较适合的方案
  3. file-saver:这是现成的库,简单方便

几个重要概念

createObjectURL :把blob对象的内存地址,以url形式给出

msSaveBlob : IE不支持a标签下载,用的是msSaveBlob方案

a标签的download属性 : 表面该a标签的行为是下载,并说明文件名

javascript 复制代码
//按blob请求接口   
// 这边响应必须设置成blob类型
axios.get('http://localhost:8000/download',{responseType:'blob'}).then((res) => {
    console.log(res.data)
    if(window.navigator.msSaveBlob){
        //说明是IE浏览器,需要做兼容
        window.navigator.msSaveBlob(res.data,{type:'application/xxxxxx'},"test.ppt")
    } else {
        //说明是现代主流浏览器 
        //传入文件数据,生成一个 下载链接
        let blobURL = URL.createObjectURL(res.data)
        //创建标签
        let link = document.createElement('a')
        //设置href
        link.href = blobURL 
        //设置a标签的行为是download,不然就跳转了,同时设置名字是"test.ppt"
        link.download = "test.ppt"
        //隐藏a标签,他只是下载,没必要出现
        link.style.display = "none"
        //模拟点击
        link.click()
        //最后,把这个URL进行销毁,免得他占内存
        URL.revokeObjectURL()
             
    }
})

//使用第三方库file-saver

javascript 复制代码
//引入第三方库
import {saveAs} from "file-saver"

axios.get('http://xxxxxxxxxxx',{responseType:'blob'}).then((res) => {
    saveAs(res.data,"fileSaveDownload.ppt")
})
	
相关推荐
孩子 你要相信光2 小时前
前端如何通过 Blob 下载 Excel 文件
前端·javascript
IT猫咪酱2 小时前
【前端】yarn install error
前端
喜欢打篮球的普通人2 小时前
Flang:LLVM Fortran 前端简介
前端
喵喵侠w2 小时前
腾讯地图Web版解决热力图被轮廓覆盖的问题
前端·javascript
qq_2786672863 小时前
ros中相机话题在web页面上的显示,尝试js解析sensor_msgs/Image数据
前端·javascript·ros
烛阴3 小时前
JavaScript并发控制:从Promise到队列系统
前端·javascript
zhangxingchao3 小时前
关于《黑马鸿蒙5.0零基础入门》课程的总结
前端
zhangxingchao3 小时前
Flutter的Widget世界
前端
$程4 小时前
Vue3 项目国际化实践
前端·vue.js
nbsaas-boot4 小时前
Vue 项目中的组件职责划分评审与组件设计规范制定
前端·vue.js·设计规范