首先,要有下载按钮
<a download onClick={()=> downloadAttentment(data)}>下载</a>
其次,定义下载function
// 此处去处理 blob 对象
const downloadStreamByATag = (data, suffix, name) => {if (suffix === void 0) { suffix = 'xls'; }if (name === void 0) { name = '导出文件'; }if (data.type) {var blob = new Blob([data]);var fileName = name + "." + suffix;if ('download' in document.createElement('a')) { // 非IE下载var elink = document.createElement('a');elink.download = fileName;elink.style.display = 'none';elink.href = URL.createObjectURL(blob);document.body.appendChild(elink);elink.click();URL.revokeObjectURL(elink.href); // 释放URL 对象document.body.removeChild(elink);}}
}// 发送请求
const downloadAttentment = (data)=> {return axios.post(url, data).then((res)=> {downloadStreamByATag(res 'xls', '名单') })
}
Blob
Blob
对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成ReadableStream
来用于数据操作。
Blob()
构造函数返回一个新的 Blob
对象。blob
的内容由参数 array
中给出的值串联而成
new Blob(array, options)
参数
options
[可选] 一个可以指定以下任意属性的对象:
type
可选,MIME
类型 默认值是空字符(“”)。endings
可选,非标准 默认值transparent
会将换行符复制到blob
中而不会改变它们。要将换行符转换为主机系统的本地约定,请指定值native
。
URL.createObjectURL()
URL.createObjectURL()
静态方法会创建一个DOMString
,其中包含一个表示参数中给出的对象的URL
。这个URL
的生命周期和创建它的窗口中的document
绑定。这个新的URL
对象表示指定的File
对象或Blob
对象。参数 object
用于创建URL
的File
对象、Blob
对象或者MediaSource
对象。返回值
一个DOMString
包含了一个对象URL
,该URL
可用于指定源object
的内容。
URL.revokeObjectURL()
URL.revokeObjectURL()
静态方法用来释放一个之前已经存在的、通过调用URL.createObjectURL()
创建的URL
对象。
当你结束使用某个URL
对象之后,应该通过调用这个方法来让浏览器知道不用在内存中继续保留对这个文件的引用了。