前端预览、下载二进制文件流(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        
}
相关推荐
Giant1005 分钟前
深度玩转 Cursor Rules:让 AI 生成的代码 100% 符合团队规范
前端·面试
代码煮茶7 分钟前
Vue3 组件通信实战 | 8 种组件通信方式全解析
前端·vue.js
AmyLin_20017 分钟前
【pdf2md-3:实现揭秘】福昕PDF SDK Python 开发实战:从逐字符提取到 LR 版面分析
开发语言·python·pdf·sdk·markdown·pdf2md
kyriewen8 分钟前
自定义事件:让代码之间也能“悄悄对话”
前端·javascript·面试
子兮曰15 分钟前
别把它当成一次普通“源码泄露”:Claude Code 事件给 AI Agent 团队提了什么醒
前端·npm·claude
心之语歌25 分钟前
Vue2 data + Vue3 ref/reactive 核心知识点总结
开发语言·前端·javascript
诸葛亮的芭蕉扇28 分钟前
tooltip-position-solution
前端·vue.js·elementui
LXXgalaxy1 小时前
`摸鱼决策轮盘`【vue3+ts前端实战小项目】
前端
这是个栗子1 小时前
关于 TypeScript 的介绍
前端·javascript·typescript
亿元程序员1 小时前
亿元Cocos小游戏实战合集指南和答疑
前端