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

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

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

几个重要概念

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

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

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

在这里插入图片描述

//按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

//引入第三方库
import {
   saveAs} from "file-saver"

axios.get('http://xxxxxxxxxxx',{
   responseType:'blob'}).then((res) => {
   
    saveAs(res.data,"fileSaveDownload.ppt")
})
	

相关推荐

  1. Vue前端如何配合SpringBoot实现文件下载

    2023-12-06 02:30:13       29 阅读
  2. 下载返回二进制文件

    2023-12-06 02:30:13       30 阅读
  3. 前端接收文件流并下载解决乱码问题

    2023-12-06 02:30:13       62 阅读
  4. 前端处理axios请求下载返回文件

    2023-12-06 02:30:13       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-06 02:30:13       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-06 02:30:13       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-06 02:30:13       82 阅读
  4. Python语言-面向对象

    2023-12-06 02:30:13       91 阅读

热门阅读

  1. C语言中getchar和putchar

    2023-12-06 02:30:13       50 阅读
  2. js执行异常处理 箭头函数 正则表达式

    2023-12-06 02:30:13       49 阅读
  3. ubuntu 更换国内镜像

    2023-12-06 02:30:13       58 阅读