js验证http请求返回数据data是否为blob格式:
// 验证是否为blob格式
export async function blobValidate(data) {
try {
const text = await data.text();
JSON.parse(text);
return false;
} catch (error) {
return true;
}
}
使用场景:
import { saveAs } from "file-saver";
export function download(url, params, filename, config = {}) {
downloadLoadingInstance = Loading.service({
text: "正在下载数据,请稍候",
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0.7)"
});
if (!config.timeout) {
config.timeout = 60000;
}
return service[params.method || "post"](
url,
params,
config.headers
? { responseType: "blob", ...config }
: {
transformRequest: [
(params) => {
return tansParams(params);
}
],
headers: { "Content-Type": "application/x-www-form-urlencoded" },
responseType: "blob",
...config
}
)
.then(async ({ data, headers }) => {
// 使用正则表达式提取文件名
const regex = /filename=(.*)$/i; // i 标志表示不区分大小写
const matches = headers["content-disposition"].match(regex);
let fileN = "";
if (matches && matches[1]) {
fileN = decodeURIComponent(matches[1]); // 对编码进行解码
} else {
console.error("无法从 Content-Disposition 中获取文件名");
}
// 解析不了就是文件内容
const isBlob = await blobValidate(data.data);
if (isBlob) {
const blob = new Blob([data.data]);
saveAs(blob, filename || fileN);
} else {
const resText = await data.data.text();
const rspObj = JSON.parse(resText);
const errMsg =
errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
Message.error(errMsg);
}
})
.catch((error) => {
console.log(error, "error");
Message.error("下载文件出现错误!");
})
在JavaScript中,你可以通过检查传入参数的类型来判断它是否为Blob
格式。下面是一个简单的示例函数,用于验证传入的参数是否为Blob
类型:
function isBlob(value) {
return value instanceof Blob;
}
// 使用示例
const blob = new Blob(["Hello, world!"], {type: "text/plain;charset=utf-8"});
console.log(isBlob(blob)); // 输出: true
const notBlob = "这只是一个字符串";
console.log(isBlob(notBlob)); // 输出: false
这个函数isBlob
接收一个参数value
,并通过instanceof
操作符检查该参数是否为Blob
构造函数的实例。如果是,则返回true
,表示参数是Blob
类型;否则返回false
。这是一种常用且直接的方式来判断对象的类型。