Blob 对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作。
看下面代码,可以使用文本构造 Blob 对象
var debug = {hello: "world"};
var blob = new Blob([JSON.stringify(debug, null, 2)], {type : 'application/json'});
示例:使用 Blob 创建一个指向类型化数组的 URL
var typedArray = GetTheTypedArraySomehow();
var blob = new Blob([typedArray.buffer], {type: 'application/octet-stream'}); // 传入一个合适的 MIME 类型
var url = URL.createObjectURL(blob);
// 会产生一个类似 blob:d3958f5c-0777-0845-9dcf-2cb28783acaf 这样的 URL 字符串
// 你可以像使用普通 URL 那样使用它,比如用在 img.src 上。
另一种读取 Blob 中内容的方式是使用 Response 对象。
var text = await (new Response(blob)).text();
某些时候后台下载文件返回到前端被转换为 Blob 对象,正常下载时,返回正确的文件流,异常时,后台返回一段包含错误信息的 json ,这时候需要提示用户下载失败,看下面代码
/**
* 格式化 blob 返回值
* @param {*} res
*/
const formatBlobResponse = async (res) => {
const text = await new Response(res).text();
let textObj = {};
try {
textObj = JSON.parse(text);
} catch (e) {}
if (text === '' || (textObj.code && Number(textObj.code) !== 200)) {
return {
success: false,
msg: textObj.msg || '下载文件失败,请联系管理员',
};
} else {
return {
success: true,
data: res,
};
}
};