前端预览、下载二进制文件流(png、pdf)

前端请求设置 responseType: "blob"

后台接口返回的文件流如下:

拿到后端返回的文件流后:

预览

javascript 复制代码
<iframe  :src="previewUrl" frameborder="0" style="width: 500px; height: 500px;"></iframe>

1、预览

javascript 复制代码
view(data) {
     // 文件类型            
     let fileType = this.fileName.slice(this.fileName.length - 3).toUpperCase();
     let myBlob = '';
     //不同文件类型设置不同的type            
     if (fileType == 'PDF') {
          myBlob = new window.Blob([data], { type: 'application/pdf' });
     } else {
          myBlob = new window.Blob([data], { type: 'image/png' });
     }
     const previewUrl = window.URL.createObjectURL(myBlob);
     this.previewUrl = previewUrl;// iframe预览
    // window.open(previewUrl, '_blank');// 浏览器新打开窗口        
},

2、下载

javascript 复制代码
// 下载        
downFile() {
   var data = this.fileData;
   var fileType = this.fileName.slice(this.fileName.length - 3).toUpperCase();
   var blob = "";
   if (fileType == 'PDF') {
       blob = new window.Blob([data], { type: 'application/pdf' });
   } else if (fileType == 'PNG') {
       blob = new window.Blob([data], { type: 'image/png' });
   }
   const a = document.createElement("a");
   const objectUrl = URL.createObjectURL(blob);
   a.setAttribute("href", objectUrl);
   a.setAttribute("download", this.fileName);
   a.click();
   URL.revokeObjectURL(a.href); // 释放url        
}
相关推荐
拾光拾趣录2 分钟前
让 Vue 动起来!用 Motion for Vue 打造丝滑交互的实战指南
前端·vue.js
尼丝5 分钟前
Token是如何保证安全不被篡改
前端·后端
一枚前端小能手8 分钟前
JavaScript数组操作的5个高效技巧
前端·javascript
小酒星小杜8 分钟前
我和女神有个约会之差点因为二维码太丑搞砸了🔥
前端·javascript·算法
OpenTiny社区15 分钟前
“Performance面板”一文通,解锁前端性能优化工具基础用法!
前端·javascript·性能优化
盏灯19 分钟前
💭单点登录, 用户状态到底存session还是cookie还是jwt?
前端
泉城老铁20 分钟前
在 Element UI 中将 el-radio-group改为纵向排列
前端·vue.js
Ratten22 分钟前
【CSS】---- CSS 实现超过固定高度后出现展开折叠按钮
前端
用户500937683903925 分钟前
基于Electron的Web打印解决方案:web-print-pdf技术分享
前端
书中曾有的故事_25 分钟前
mcp-faker-json
前端·mcp