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

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

  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")
})
	
相关推荐
小粉粉hhh9 分钟前
Node.js(五)——编写接口
前端·javascript·node.js
进击切图仔39 分钟前
SAM3 微调标注流水线和 Label Studio
java·服务器·前端
自然 醒1 小时前
前端如何实现在线预览office常见文件功能?
前端·vue.js
肉肉不吃 肉1 小时前
前端调试跨域如何解决
前端·vue.js
Liora_Yvonne1 小时前
为什么你写了3年前端还是搭不好一个项目
前端·架构
snow@li1 小时前
Java:后端项目会有一个类似前端node_modules的目录吗 / jar包在本地仓库 ~/.m2/repository 中按版本共存
java·开发语言·前端
weedsfly1 小时前
单例模式在前端中的正确打开方式
前端·javascript·面试
PedroQue991 小时前
uni-router新推useUniEventChannel,彻底解决页面通信难题
前端·uni-app
IT_陈寒1 小时前
Vite冷启动快?我遇到了个奇怪的依赖问题
前端·人工智能·后端
2603_955279702 小时前
通过 brew upgrade cmake 升级到最新版本
前端