vue 下载二进制文件

文章目录

概要

vue 下载后端返回的二进制文件流

技术细节

javascript 复制代码
import axios from "axios";
const baseUrl = process.env.VUE_APP_BASE_API;
//downLoadPdf("/pdf/download?pdfName=" + res + '.pdf', res);
export function downLoadPdf(str, fileName) {
  var url = baseUrl + str;
  axios({
    method: "get",
    url: url,
    responseType: "blob",//一般都是blob
    headers: { isToken: false },//传不传token取决于后端要求
    // headers: { Authorization: "Bearer " + getToken() },
  }).then((res) => {
    // // 创建blob对象,解析流数据
    //基本都是res.data 
    //type类型pdf(application/pdf)
    //xlsx(application/vnd.openxmlformats-officedocument.spreadsheetml.sheet)
    //zip(application/zip)
    const blob = new Blob([res.data], {
      type: "application/pdf",
    });
    //1.浏览器打开-预览
    const url = window.URL.createObjectURL(blob);
    window.open(url);
    //使用a标签下载
    const a = document.createElement("a");
    // 兼容webkix浏览器,处理webkit浏览器中href自动添加blob前缀,默认在浏览器打开而不是下载
    const URL = window.URL || window.webkitURL;
    // 根据解析后的blob对象创建URL 对象
    const herf = URL.createObjectURL(blob);
    // 下载链接
    a.href = herf;
    // 下载文件名,如果后端没有返回,可以自己写a.download = '文件.pdf'
    a.download = fileName;
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
    // 在内存中移除URL 对象
    window.URL.revokeObjectURL(herf);
  });
}
相关推荐
y先森2 分钟前
CSS3中的伸缩盒模型(弹性盒子、弹性布局)之伸缩容器、伸缩项目、主轴方向、主轴换行方式、复合属性flex-flow
前端·css·css3
前端Hardy2 分钟前
纯HTML&CSS实现3D旋转地球
前端·javascript·css·3d·html
susu10830189115 分钟前
vue3中父div设置display flex,2个子div重叠
前端·javascript·vue.js
IT女孩儿1 小时前
CSS查缺补漏(补充上一条)
前端·css
吃杠碰小鸡2 小时前
commitlint校验git提交信息
前端
天天进步20152 小时前
Vue+Springboot用Websocket实现协同编辑
vue.js·spring boot·websocket
虾球xz3 小时前
游戏引擎学习第20天
前端·学习·游戏引擎
我爱李星璇3 小时前
HTML常用表格与标签
前端·html
疯狂的沙粒3 小时前
如何在Vue项目中应用TypeScript?应该注意那些点?
前端·vue.js·typescript
小镇程序员3 小时前
vue2 src_Todolist全局总线事件版本
前端·javascript·vue.js