当前位置: 首页 > news >正文

js处理服务器响应Blob对象格式文件处理

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));  // 输出: trueconst notBlob = "这只是一个字符串";
console.log(isBlob(notBlob));  // 输出: false

这个函数isBlob接收一个参数value,并通过instanceof操作符检查该参数是否为Blob构造函数的实例。如果是,则返回true,表示参数是Blob类型;否则返回false。这是一种常用且直接的方式来判断对象的类型。

相关文章:

  • 【Unity】免费的高亮插件——QuickOutline
  • 【全开源】JAVA同城搬家系统源码小程序APP源码
  • Scrapy框架简单介绍及Scrapy项目编写详细步骤(Scrapy框架爬取豆瓣网站示例)
  • 在Ubuntu系统中使用Systemctl添加启动项的详细指南
  • Mybatis入门——其他查询操作和数据库连接池(4)
  • 【oracle】Oracle RAC中的GNS到底是什么?
  • ctfshow web入门 黑盒测试
  • linux input 驱动
  • 持续总结中!2024年面试必问 20 道 Rocket MQ面试题(二)
  • 语言模型的发展
  • 磁盘管理以及文件系统08
  • Python二叉树遍历算法
  • 防御恶意爬虫攻击
  • 学习Java的日子 Day49 函数,DOM
  • aws glue配置读取本地kafka数据源
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 10个最佳ES6特性 ES7与ES8的特性
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • ES6核心特性
  • Hexo+码云+git快速搭建免费的静态Blog
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • java8-模拟hadoop
  • Kibana配置logstash,报表一体化
  • PHP面试之三:MySQL数据库
  • Python实现BT种子转化为磁力链接【实战】
  • SegmentFault 2015 Top Rank
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • Vue小说阅读器(仿追书神器)
  • 从输入URL到页面加载发生了什么
  • 今年的LC3大会没了?
  • 区块链共识机制优缺点对比都是什么
  • 山寨一个 Promise
  • 树莓派 - 使用须知
  • 白色的风信子
  • 大数据全解:定义、价值及挑战
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • # linux从入门到精通(三)
  • #1014 : Trie树
  • (35)远程识别(又称无人机识别)(二)
  • (C语言)二分查找 超详细
  • (day 12)JavaScript学习笔记(数组3)
  • (MATLAB)第五章-矩阵运算
  • (solr系列:一)使用tomcat部署solr服务
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (回溯) LeetCode 77. 组合
  • (十六)、把镜像推送到私有化 Docker 仓库
  • (贪心) LeetCode 45. 跳跃游戏 II
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一一四)第九章编程练习
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)【Hibernate总结系列】使用举例
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)C#调用WebService 基础
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • .axf 转化 .bin文件 的方法