Axios的几种不同的responseType处理响应,以及blob与arraybuffer的解析

在使用 Axios 时,你可以通过设置 responseType 选项来指定如何处理响应数据。Axios 提供了几种不同的 responseType 选项,每种选项都会影响响应数据的格式。

以下是这些选项及其示例:

1. responseType: 'json'

这是默认选项,表示将响应数据解析为 JSON 对象。如果响应不是 JSON 格式,Axios 会自动尝试转换。(现代的前后端分离接口一般来说是以json格式来交互)

示例:

axios.get('/api/data').then(response => {console.log(response.data); // JSON 对象}).catch(error => {console.error(error);});

2. responseType: 'text'

此选项将响应数据处理为文本字符串。

示例:

axios.get('/api/text', { responseType: 'text' }).then(response => {console.log(response.data); // 纯文本字符串}).catch(error => {console.error(error);});

3. responseType: 'blob'

此选项将响应数据处理为 Blob 对象,适用于文件下载或图像处理等场景。

示例:

axios.get('/api/file', { responseType: 'blob' }).then(response => {const url = URL.createObjectURL(response.data);const link = document.createElement('a');link.href = url;link.setAttribute('download', 'file.pdf');document.body.appendChild(link);link.click();}).catch(error => {console.error(error);});

或者显示图片

axios.get('/api/file', { responseType: 'blob' }).then(response => {let img:any = document.querySelector('#image');let url  = window.URL.createObjectURL(res.data);img.src = url;img.onload = () => {//等这个img对象完全加载src完毕就删除这个生成的blob对象。window.URL.revokeObjectURL(url)}}).catch(error => {console.error(error);});

4. responseType: 'arraybuffer'

此选项将响应数据处理为 ArrayBuffer 对象,适用于处理二进制数据。

示例:

axios.get('/api/audio', { responseType: 'arraybuffer' }).then(response => {const audioContext = new (window.AudioContext || window.webkitAudioContext)();audioContext.decodeAudioData(response.data, buffer => {const source = audioContext.createBufferSource();source.buffer = buffer;source.connect(audioContext.destination);source.start(0);});}).catch(error => {console.error(error);});

5. responseType: 'document'

此选项将响应数据解析为文档对象(DOM 对象),适用于处理 HTML/XML 文档。

示例:

axios.get('/api/page', { responseType: 'document' }).then(response => {console.log(response.data); // DOM 对象}).catch(error => {console.error(error);});

6. responseType: 'stream'

在 Node.js 环境中使用,表示将响应数据处理为流。适用于大文件下载。

示例:

const fs = require('fs');
const axios = require('axios');axios.get('/api/largefile', { responseType: 'stream' }).then(response => {response.data.pipe(fs.createWriteStream('largefile.txt'));}).catch(error => {console.error(error);});

使用说明

选择合适的 responseType 可以提高应用的效率和性能,尤其在处理大型文件或需要特定数据格式时。确保你选择的 responseType 与服务器返回的数据格式一致,否则可能会导致错误。


ArrayBuffer 是一种通用的、固定长度的二进制数据缓冲区。在 JavaScript 中,ArrayBuffer 通常用于处理原始二进制数据,比如文件内容、音视频数据、图像数据、加密数据等。它是 Web 应用程序中处理大量数据的基础类型之一。

ArrayBuffer 的典型内容

ArrayBuffer 的内容是原始的二进制数据,它不带有任何格式或结构信息。这使得它非常灵活,可以用来存储任何类型的二进制数据。具体的内容取决于数据的来源和用途。例如:

  • 音频数据:可以包含 PCM 编码的音频样本。
  • 图像数据:可以包含图像的像素值。
  • 文件数据:可以包含从文件读取的原始字节。
  • 网络数据:可以包含从网络接收的原始数据包。

示例代码解析

axios.get('/api/audio', { responseType: 'arraybuffer' }).then(response => {const audioContext = new (window.AudioContext || window.webkitAudioContext)();audioContext.decodeAudioData(response.data, buffer => {const source = audioContext.createBufferSource();source.buffer = buffer;source.connect(audioContext.destination);source.start(0);});}).catch(error => {console.error(error);});

示例中的操作解释:

  1. 发送 GET 请求

    • 使用 Axios 向 /api/audio 端点发送 GET 请求。
    • 设置 responseType'arraybuffer',这表示期望收到的响应数据是二进制的 ArrayBuffer 类型。
  2. 创建 AudioContext

    • AudioContext 是 Web Audio API 的一部分,用于在 Web 上处理音频。它提供了多种处理和播放音频的方法。
    • 代码使用 AudioContextwebkitAudioContext(在某些旧版浏览器中)来创建音频上下文实例。
  3. 解码音频数据

    • 使用 audioContext.decodeAudioData() 方法解码从服务器接收到的 ArrayBuffer 音频数据。
    • decodeAudioData() 方法会将 ArrayBuffer 解码为一个 AudioBuffer,后者是 Web Audio API 中的音频数据格式。
  4. 播放音频

    • 创建一个 AudioBufferSourceNode 对象,它是一个音频源节点,可以播放 AudioBuffer 中的数据。
    • 将解码后的 AudioBuffer 设置为音频源节点的缓冲区,并将其连接到音频上下文的目的地(通常是扬声器)。
    • 调用 source.start(0) 开始播放音频。

ArrayBuffer 的常见用途

  • 媒体处理:解码和播放音频、视频数据。
  • 文件处理:读取和写入文件的原始字节内容。
  • 数据转换:将二进制数据转换为其他格式,如文本、图像等。
  • 网络通信:处理低级网络协议的数据包。

通过使用 ArrayBuffer,开发者可以精细地控制数据的处理和转换,适合需要高性能数据操作的应用场景。


Blob 和 ArrayBuffer 确实有一些相似之处,因为它们都可以用来处理二进制数据。然而,它们在使用场景和特性上还是有一些重要的区别:

相似之处

  1. 二进制数据存储:Blob 和 ArrayBuffer 都可以用于存储和传输二进制数据,比如图像、音频、视频等文件内容。
  2. 浏览器支持:两者在现代浏览器中都有很好的支持,可以通过 JavaScript 进行操作。

不同之处

1. 创建方式与数据类型
  • Blob

    • Blob(Binary Large Object)是一个文件状的对象,主要用于存储大量的二进制数据。
    • 它可以包含任意数量的 ArrayBufferUint8Array 等类型的数据,并且可以设置 MIME 类型。
    • Blob 通常用于表示和处理不可变的、类文件的数据,如图像、视频等。
  • ArrayBuffer

    • ArrayBuffer 是一种通用的、固定长度的二进制数据缓冲区。
    • 它不能直接表示具体的文件类型,更像是一块原始的内存空间。
    • 主要用于处理低级数据操作,如音频处理、加密解密、数据解析等。
2. 特性
  • Blob

    • Blob 是不可变的,也就是说,一旦创建就不能修改其内容。可以通过切片 (slice()) 方法创建一个新的 Blob。
    • 它可以直接用来创建 URL(通过 URL.createObjectURL()),方便在 Web 页面上使用,例如在 <img> 标签中显示图片。
    • 支持获取数据大小和 MIME 类型等属性。
  • ArrayBuffer

    • ArrayBuffer 是可变的,可以直接读取或写入其内容,通过视图对象(如 Uint8ArrayDataView 等)操作。
    • 主要用于处理需要直接访问和修改二进制数据的场景。
    • 没有内建的 MIME 类型或大小属性,需要额外的逻辑来处理这些信息。
3. 典型使用场景
  • Blob

    • 适用于文件上传、下载、展示等场景,如用户上传的图像、生成 PDF 文件等。
    • 通过 XHR 请求或 Fetch API 获取数据时,也常用来表示服务器返回的二进制文件。
  • ArrayBuffer

    • 适用于需要精细控制的二进制数据处理场景,如解析自定义数据格式、处理音视频解码、加密算法等。
    • 在 WebSocket 或其他二进制协议通信中,也常用来表示传输的数据。

总结

  • 虽然 Blob 和 ArrayBuffer 都可以用于处理二进制数据,但它们的设计目标和使用场景有所不同。
  • Blob 更像是一个高层次的二进制文件容器,适合处理文件和数据块,而 ArrayBuffer 是一个底层的二进制数据结构,更适合需要直接操作字节的场景。
  • 根据具体需求选择合适的数据类型,可以更有效地处理和优化数据操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/876965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

App测试分发的秘密:如何让你的应用程序快速上线

App测试分发的重要性 在移动应用程序的开发过程中&#xff0c;测试分发是一个非常重要的环节。它可以帮助开发者快速地将应用程序推广到目标用户手中&#xff0c;收集反馈&#xff0c;进行bug修复和优化&#xff0c;从而提高应用程序的质量和用户体验。但是&#xff0c;测试分…

创业团队如何选择DevOps工具?

极狐GitLab 正式推出 499/人/年的 SaaS 团队版&#xff0c;AI DevOps 专业技术服务支持&#xff0c;让软件研发效率起飞&#xff01;官网链接&#xff1a;https://dl.gitlab.cn/tfk6s7bh 首先要考虑创业团队关心的点&#xff0c;主要包括以下几个&#xff1a; 价格便宜 对于创…

Android分区管理工具sgdisk使用

#有时df -h查看分区信息无法满足需求# 借助Android系统自带的sgdisk可以查看详细的分区信息&#xff0c;类似fdisk命令&#xff0c;sgdisk同样可以创建分区&#xff0c;功能也很强大。 一、sgdisk帮助信息 127|console:/ # sgdisk USAGE: sgdisk [OPTION...] <device>…

linux脚本:自动检测的bash脚本,用于检查linux的系统性能

目录 一、要求 二、脚本介绍 1、脚本内容 2、解释 3、使用方法&#xff1a; &#xff08;1&#xff09;脚本文件 &#xff08;2&#xff09;赋予权限 &#xff08;3&#xff09;执行结果 三、相关命令介绍 1、top &#xff08;1&#xff09;定义 &#xff08;2&…

Layui修改表格分页为英文

Layui修改表格分页为英文 1.前言2.Laypage属性 1.前言 主要记录初次使用Layui没有好好看官方文档踩坑&#xff0c;修改了源码才发现可以自定义 使用的Layui版本2.9.14 2.Laypage属性 Laypage属性中带的有自定义文本的属性 示例代码 table.render({.......page: {skipText: …

【Python】numpy库中上难度例题4道+详解考察点(多维数组+多层嵌套循环)

题目一&#xff1a;灰度图像中识别并统计特定像素模式的出现次数 题目: 假设你正在开发一个图像处理算法&#xff0c;需要在一个较大的灰度图像中识别并统计特定像素模式的出现次数。给定一个大图像 large_image 和一个较小的模板图像 template&#xff0c;编写一个 Python 函…

2.4GHz射频前端集成芯片:AT2401C芯片中文资料

关于AT2401C的基本资料&#xff1a; AT2401C是一款面向Zigbee&#xff0c;无线传感网络以及其他2.4GHz频段无线系统的全集成射频功能的射频前端单芯片。 那么射频放大器的作用是什么&#xff1f;它是用来放大来自射频信号源的低功率信号&#xff0c;放大到较高的功率后&#xf…

7. 运行时数据区-栈

栈的分类 栈分为Java虚拟机栈还有本地方法栈&#xff1a; Java虚拟机栈&#xff1a;用于保存Java中的方法相关的内容本地方法栈&#xff1a;用于保存在Java中使用native 标记的用C来实现方法 由于hotspot的作者发现使用一个栈就可以保存以上两个部分的内容&#xff0c;所以在…

探索编程语言的基本结构

在编程的世界里&#xff0c;每种语言都有其独特的语法和规则&#xff0c;但无论是哪种语言&#xff0c;它们都遵循着一些共同的基本结构&#xff0c;这些结构构成了程序的骨架。了解这些基本结构对于初学者来说至关重要&#xff0c;因为它们是编写有效、可维护代码的基础。以下…

ElasticSearch第4篇(亿级中文数据量 ElasticSearch与Sphinx建索引速度、查询速度、并发性能、实测对比)

经过实测&#xff1a;1.09亿的数据量进行中文检索。ElasticSearch单机的检索性能在0.005~5.6秒之间&#xff0c;此检索速度可满足95%的业务场景&#xff08;注意&#xff1a;每条ES文档平均65个汉字&#xff0c;数据源取自几千本小说&#xff0c;大部分文档在15~300个汉字之间&…

守护模型安全:在Mojo模型中实现动态自定义安全性保障

守护模型安全&#xff1a;在Mojo模型中实现动态自定义安全性保障 在机器学习领域&#xff0c;模型的安全性是一个至关重要的议题。Mojo模型&#xff0c;作为一个通用的术语&#xff0c;可以指代任何机器学习或深度学习模型。随着模型被集成到生产环境中&#xff0c;确保其安全…

moment.js的使用方法

moment.js 是一个功能强大的 JavaScript 库&#xff0c;用于解析、验证、操作和显示日期和时间。虽然 moment.js 因其庞大和一些性能问题已经被推荐逐步淘汰&#xff0c;但它仍然是一个非常流行的库&#xff0c;在许多项目中使用。以下是 moment.js 的基本使用方法。 安装 你…

学习测试14-实战3-复习-使用CANoe打开半成品

数据 链接: https://pan.baidu.com/s/1k0SFq0luDvEbqimFgtfyKg?pwd9a5t 提取码: 9a5t 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 1&#xff0c;导入信号、报文、节点 2&#xff0c;导入数据库 3&#xff0c;导入can代码 4&#xff0c;导入环境变量 5&#x…

云计算环境中的等保测评挑战与解决方案

随着云计算技术的飞速发展&#xff0c;越来越多的企业和组织选择将业务迁移到云端&#xff0c;以享受其带来的高可靠性、高性能和弹性伸缩等优势。然而&#xff0c;云计算环境的复杂性和动态性也给信息安全带来了新的挑战&#xff0c;特别是等级保护测评&#xff08;以下简称“…

vue 进入页面自动刷新并且只刷新一次

方法一&#xff1a;&#xff08;在当前页面写&#xff09; if (location.href.indexOf("#caseDsc") -1) {location.href location.href "#caseDsc";this.reload();} 方法二&#xff1a;&#xff08;在home页面写&#xff09; 通过监听路由跳转&#…

CTF竞赛介绍以及刷题网址(非常详细)零基础入门到精通,收藏这一篇就够了

前言 CTF&#xff08;Capture The Flag&#xff09;中文一般译作夺旗赛&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。发展至今…

【保姆级教程】Windows 远程登陆 Linux 服务器的两种方式:SSH + VS Code,开发必备

0. 前言 很多情况下代码开发需要依赖 Linux 系统&#xff0c;远程连接 Linux 服务器进行开发和维护已成为一种常态。对于使用Windows系统的开发者来说&#xff0c;掌握如何通过 SSH 安全地连接到 Linux 服务器&#xff0c;并利用 VS Code 编辑器进行开发&#xff0c;是一项必备…

海外问卷调查这个项目怎么样?

大家好&#xff0c;我是橙河老师&#xff0c;今天讲一讲海外问卷调查这个项目怎么样&#xff1f;我自己做这个项目已经有三四年的时间了&#xff0c;在这个行业里算是资深玩家&#xff0c;我自己的工作室也一直稳定在操作这个项目&#xff0c;首先可以肯定的是&#xff0c;这个…

<数据集>棉花识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;13765张 标注数量(xml文件个数)&#xff1a;13765 标注数量(txt文件个数)&#xff1a;13765 标注类别数&#xff1a;4 标注类别名称&#xff1a;[Partially opened, Fully opened boll, Defected boll, Flower] 序…

甄选范文“论企业集成架构设计及应用”软考高级论文,系统架构设计师论文

论文真题 论企业集成架构设计及应用企业集成架构(Enterprise Integration Arhitecture,EIA) 是企业集成平台的核心,也是解决企业信息孤岛问题的关键。企业集成架构设计包括了企业信息、业务过程、应用系统集成架构的设计。实现企业集成的技术多种多样,早期的集成方式是通过…