添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

这样在返回data中可以得到一个浏览器可以解析的blob数据

通过以下代码,可以将二进制数据转化为可下载文件,并通过a标签下载文件

let blob = new Blob([res],  { type: 'application/vnd.ms-excel' }) // 核心代码
let url = window.URL.createObjectURL(this.blob)
let link = document.createElement('a')
link.href = url

为了方便使用,我将这个过程封装为一个Download类,直接复制可使用,也能很轻松的拓展

* 流文件转化为对应格式的文件 class Download { constructor() { this.blob = {} this.filename = '' zip(res) { this.blob = new Blob([res], { type: 'zip;charset=utf-8' }) this.down() xlsx(res) { this.blob = new Blob([res], { type: 'application/vnd.ms-excel' }) this.down() down() { let url = window.URL.createObjectURL(this.blob) let link = document.createElement('a') link.style.display = 'none' link.href = url link.download = `${this.filename}` document.body.appendChild(link) link.click() window.URL.revokeObjectURL(link.href) document.body.removeChild(link) export default Download

使用方法:

1.先new一个download对象;

2.为download对象属性filename赋值

3.下载Excel调用 xlsx方法,下载zip调用zip方法,把后端传递的data作为参数传入即可

const download = new Download()
download.filename = 'filename.xlsx'
download.xlsx(res.data)

有时文件名后端会通过请求头传递,一般放置在header的content-disposition中,通过以下方式可以获得名称,并为文件名转义

download.filename = decodeURI(res.headers['content-disposition'].split('=')[1])

注意:无需显示调用down方法

代码很简洁,也很容易拓展,如果需要拓展其他类型文件,找到对应的Mime 类型,在类中编写新的方法即可

关于更多Mime介绍请参考:https://www.w3school.com.cn/media/media_mimeref.asp

前端在做管理系统开发时经常遇到的需求:下载文件入Excel,World,zip处理方式有两种:1.后端生成下载地址,前端调用2.后端返回二进制文件流,前端转换后下载本文主要介绍第二种在向后端发起请求时,需要在请求中加上responseType: 'blob'这样在返回data中可以得到一个浏览器可以解析的blob数据通过以下代码,可以将二进制数据转化为可下载文件,并通过a标签下载文件let blob = new Blob([res], { type: 'app.
HTML5 Ajax 2.0标准中,增强了Ajax的许多功能,包括发送FormData数据,上传数据进度条等诸多功能。但实际上,Ajax可以字节发送二进制数据。 发送二进制数据 var oReq = new XMLHttpRequest(); oReq.open(POST, url, true); oReq.onload = function (oEvent) { // Uploaded. var blob = new Blob(['abc123'], {type: 'text/plain'}); oReq.send(blob); var myArray = new Arr
let blob = new Blob([res.data], { type: "application/vnd.ms-excel", }); // 2.获取请求返回的response对象中的blob 设置文件类型,这里以excel为例 let url = window.URL.createObjectURL(bl
在复制粘贴图片自动上传时,发现企业微信浏览器会把file类型的文件识别为Blob类型,导致后端无法识别文件类型。 查询以后发现将Blob文件转为File文件就能解决该问题。 这是MDN中对Blob定义的截图: 这是MDN中,构造一个File类型要的参数: 这是我的实现方法: const Blob2ImageFileForWXBrowser = (obj: Blob) => new window.File([obj], `${(new Date).getTime()}.png` ); 第一种方式存储,则前端可以直接将存储路径赋值给src属性显示图片. 第二种方式存储,则前端得到的是二进制数据,需将二进制交由blob对象处理,然后通过blob的API生成临时的URL赋值给src属性来显示图片. 个人认为第一种...
* @param {String} fileName 文件名称 export const convertRes2BlobToFile = (blob, fileName) => { const mBlob = new Blob([blob]) const name = fileName if ('download' in document.crea. //可以命名文件的导出方法 function getAllData(dataArray) { if (dataArray == null || dataArray.length == 0) { toastr.warning("暫無數據可導出"); return; var lHtml = '<table border="1 url: "api/TemplateDownload/GetAllTemplateZIP", headers: { "content-type": "application/json; charset=utf-8", Authorization: Cookies.get("token") || "", 前端导出数据代码为: let blob = new Blob([res.data], {type: 'application/vnd.ms-excel; charset=utf-8'}) let url = window.URL.createObjectURL(blob) const link = document.createElement('a') link.href = url link.download = 'xxx.xls
前端下载文件的方法有两种, 一种是后端返回下载的URL, 使用 Window.open(URL) 下载, 另一种就是后端直接返回文件二进制内容,前端做转换再下载。如果后台返回的是 get 请求的下载可以直接使用 a 标签下载 如果后台返回的是 URL 地址 如果后台的的下载接口是 post 请求时,需要使用 blob 转换,前端如何将二进制文件做转换实现下载呢?只要思想就是把后端返回的二进制文件放在 Blob 里面,并且把使用Blob 创建一个URL ,再通过JavaScript动态创建一个a标签,使用