这样在返回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标签,使用