【Content-Type详解、Postman中binary格式、json格式数据转原始二进制流等】
Content-Type详解、Postman中binary格式、json格式数据转原始二进制流等
- 背景:
- postman中如何使用binary格式上传文件
- Content-Type
- Content-Type的格式由三部分组成:
- 以下是一些常见的Content-Type示例:
- Postman中 binary格式
- 定义:
- 用途:
- 特点:
- JSON数据转换为二进制数据
背景:
前端拿到数据大对象后,post请求传给后端。
postman中如何使用binary格式上传文件
打开Postman:启动Postman应用程序。
创建请求:在Postman中新建一个POST请求,并输入目标API的URL。
选择Body标签:在请求窗口中,点击“Body”标签页。
选择binary格式:在Body标签页中,从下拉菜单中选择“binary”作为请求体的格式。
上传文件:点击“Select Files”按钮,从本地文件系统中选择要上传的二进制文件。或者,如果文件已经在Postman的文件管理器中,可以直接选择它。
发送请求:配置完成后,点击“Send”按钮发送请求。Postman会将选定的二进制文件作为请求体发送到服务器。
Content-Type
Content-Type的格式由三部分组成:
主类型(type)、子类型(subtype)和可选参数(parameter)。
主类型(type):
任意字符串,表示媒体的大类,如text、image、application等。其中,如果是“*”号则代表所有类型。
text:用于标准化地表示的文本信息,文本消息可以是多种字符集或者多种格式。
Multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据流的形式,常用于上传大型文件。
Application:用于传输应用程序数据或者二进制数据,日常前后端传输数据常用。
Message:用于包装一个E-mail消息。
Image:用于传输静态图片数据。
Video:用于传输动态影像数据,可以是与音频编辑在一起的视频数据格式。
子类型(subtype):
任意字符串,表示媒体的具体类型,如html、jpeg、json等,用“/”与主类型隔开。其中,如果是“*”号则代表所有类型。常见的subtype有text/html、application/x-www-form-urlencoded、application/json、multipart/form-data、application/xml、text/plain、text/css、text/javascript等。
可选参数(parameter):
指定额外的信息,如字符集编码(charset)、boundary等。
charset:指定字符编码的标准,常见的有ISO-8859-1、UTF-8、GB2312、ASCII等。
boundary:多用于上传文件时使用,用于分割数据。当content-type为multipart/form-data类型时,需要用boundary指定分隔符。
以下是一些常见的Content-Type示例:
-
HTML文档标记:
text/html
-
普通ASCII文档标记:
text/plain
-
JPEG图片标记:
image/jpeg
-
GIF图片标记:
image/gif
-
JavaScript文档标记:
application/javascript
-
XML文件标记:
application/xml
-
PDF文档:
application/pdf
-
任意二进制数据(通常用于文件下载):
application/octet-stream
-
JSON格式的数据:
application/json
在表单中进行文件上传或发送包含文件以及非 ASCII 字符的表单数据
axios默认的Content-Type,适用于发送JSON格式的数据。在发送JSON数据时,可以直接将 JavaScript对象传递给axios,axios会自动将其序列化为JSON字符串。
一种越来越流行的数据交换格式,用于传输结构化数据。与 application/x-www-form-urlencoded 相比,它支持更复杂的数据结构,并且更适合与 RESTful API 交互。 -
URL编码的表单数据:
application/x-www-form-urlencoded
特点:键值对形式的数据结构清晰明;大部分服务器和编程语言都支持该编码方式;不适合 传输大量数据及复杂数据结构。
使用:当需要以键值对的形式发送数据(登录、注册的简单表单数据;一些传统的 Web 服务)时可使用。
可以通过使用qs库将js对象序列化为 URL 查询字符串。import qs from 'qs'; var data = {a:1,b:2} axios.post(url, qs.stringify(data, { indices: true })); 配置选项 indices 的作用是,当对象包含数组时,是否在键中包含数组索引。
输出 a=1&b=2&c[0]=z&c[1]=y 这样可以将对象序列化为key=value&key=value的形式1 2。
-
用于上传文件或包含文件的表单数据:
multipart/form-data
用途:是一种MIME 类型。主要用于 POST 请求中,将表单数据和文件打包发送给服务器。它是 HTML 表单中文件上传的默认编码类型,当表单的 enctype 属性设置为 multipart/form-data 时,浏览器会以该编码方式提交表单;
在与 RESTful API 交互时,如果 API 需要接收文件或多种类型的表单数据,通常也会使用 multipart/form-data 编码方式。
示例:<form action="/upload" method="POST" enctype="multipart/form-data"><input type="text" name="username"><input type="file" name="file"><button type="submit">上传</button> </form>
通过 Axios 发送一个包含文件和其他字段的 POST 请求:// 创建一个FormData实例 const formData = new FormData(); // 向FormData中添加数据 // 假设我们有一个文件输入元素,其files属性包含用户所选文件 // const fileInput = document.querySelector('input[type="file"]'); // formData.append('file', fileInput.files[0]); // 从文件输入中获取文件并添加到formData中// 为了演示目的,我们创建了一个Blob对象来模拟文件上传。 const fakeFile = new Blob(['Hello, world!'], { type: 'text/plain' }); formData.append('file', fakeFile, 'example.txt'); // 添加文件到formData,并指定文件名 //添加其他非文件字段 formData.append('username', 'JohnDoe'); formData.append('email', 'johndoe@example.com');// 使用Axios发送POST请求 axios.post('https://example.com/upload', formData, {headers: {// Axios会自动为FormData设置Content-Type为multipart/form-data// 但你可以在这里添加其他自定义头部信息'X-Custom-Header': 'SomeValue'// 注意:不要手动设置Content-Type头,Axios会为你处理// 'Content-Type': 'multipart/form-data' // 这行应该被注释掉或删除} }) .then(response => {console.log('上传成功:', response.data); }) .catch(error => {console.error('上传失败:', error); });
与 application/x-www-form-urlencoded 相比,它支持传输二进制文件,并且不受 URL 长度的限制。
在实际应用中,正确设置Content-Type对于确保数据在网络上传输和处理的正确性至关重要。开发人员在开发过程中应注意客户端发送请求和服务器响应时的Content-Type设置,以确保数据的正确解析和处理。
Postman中 binary格式
定义:
binary格式
在Postman中对应着HTTP请求中的Content-Type: application/octet-stream
,表示发送的是原始的二进制数据流。
用途:
主要用于上传图片、音频、视频、文档等二进制文件
到服务器。
特点:
无键值对: 与form-data和x-www-form-urlencoded等格式不同,binary格式不依赖于键值对来组织数据。它直接上传文件的二进制内容,因此一次通常只能上传一个文件。
文件类型: 确保选择的文件是二进制文件
,如图片、音频、视频等。非二进制文件(如文本文件)虽然也可以以二进制形式发送,但可能不是最佳实践。
文件大小: 检查服务器对上传文件的大小限制。如果文件过大,可能会导致上传失败或服务器错误。
Content-Type: 虽然Postman会自动为binary格式设置Content-Type为application/octet-stream,但在某些情况下,服务器可能期望特定的Content-Type。如果遇到这种情况,可以在Headers选项卡中手动设置Content-Type。
JSON数据转换为二进制数据
要将JSON数据转换为二进制数据,你需要先将JSON字符串编码为字节序列(例如,使用UTF-8编码),然后将这些字节序列封装成某种二进制格式(如ArrayBuffer或Blob)。
- .将JSON对象转换为字符串(如果它还不是字符串):
const jsonObj = { key: "value", num: 123 };
const jsonString = JSON.stringify(jsonObj);
- 使用TextEncoder将JSON字符串编码为Uint8Array(这是UTF-8编码的字节序列):
const encoder = new TextEncoder();
const uint8Array = encoder.encode(jsonString);
- (可选)将Uint8Array转换为ArrayBuffer
const arrayBuffer = uint8Array.buffer;
- (可选)将Uint8Array(或ArrayBuffer)封装为Blob(如果你需要创建一个可以下载或上传的二进制文件):
const blob = new Blob([uint8Array], { type: 'application/json' });
现在,你已经有了一个表示JSON数据的二进制格式(ArrayBuffer或Blob)。
请求发送:
设置axios请求头:
//post请求头headers: {'Content-Type': 'application/json;charset=UTF-8;application/octet-stream',},
- 示例:
在这个示例中,我们创建了一个隐藏的链接(a元素),设置了它的href属性为指向blob的URL,并触发了点击事件来下载文件。下载完成后,我们释放了URL对象以避免内存泄漏。
// 假设你有一个JSON对象
const jsonObj = { key: "value", num: 123 };// 将JSON对象转换为字符串
const jsonString = JSON.stringify(jsonObj);// 使用TextEncoder将字符串编码为Uint8Array(UTF-8编码)
const encoder = new TextEncoder();
const uint8Array = encoder.encode(jsonString);// 将Uint8Array转换为ArrayBuffer(如果需要)
const arrayBuffer = uint8Array.buffer;// 将Uint8Array(或ArrayBuffer)封装为Blob(如果需要)
const blob = new Blob([uint8Array], { type: 'application/json' });// 现在你可以使用arrayBuffer或blob进行进一步的操作,例如通过XMLHttpRequest或Fetch API发送数据
// 或者创建一个指向blob的URL并下载它
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.style.display = 'none';
a.href = url;
a.download = 'data.json';
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
相关文章:
【Content-Type详解、Postman中binary格式、json格式数据转原始二进制流等】
Content-Type详解、Postman中binary格式、json格式数据转原始二进制流等 背景:postman中如何使用binary格式上传文件 Content-TypeContent-Type的格式由三部分组成:以下是一些常见的Content-Type示例: Postman中 binary格式定义:用…...
spring boot知识点3
1.spring boot能否使用xml配置 可以,但是很繁琐,现在都建议走JavaConfig 2.spring boot的核心配置文件 application.properties application.yml 3.bootstrap.properties和application.properties的区别 b:用于远程配置 a:…...
Dart 3.5语法 28-29
028问号可选类型可空类型保存null空String的isEmpty和NotEmpty ?问号可选类型可空类型保存null叹号强制解包??双冒号运算符String的isEmpty和isNotEmpty ? 问号可选类型,可空类型 可选类型可以保存null,就是空的意思 String.isEmpty 是判断是否是空白字符串,他并不是null…...

利用AFE+MCU构建电池管理系统(BMS)
前言 实际BMS项目中,可能会综合考虑成本、可拓展、通信交互等,用AFE(模拟前端)MCU(微控制器)实现BMS(电池管理系统)。 希望看到这篇博客的朋友能指出错误或提供改进建议。 有纰漏…...

【教学类-89-06】20250220新年篇05——元宵节灯笼
背景需求: 每年元宵、国庆都回带孩子做灯笼。用python对"对折灯笼“的纸模进行不同图案的填充(区分物权) 【教学类-39】A4红纸-国旗灯笼纸模(庆祝中华人民共和国成立74周年)_a4 打印 灯笼-CSDN博客文章浏览阅读1…...

C++ Primer 类的静态成员
欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…...
【UCB CS 61B SP24】Lecture 4 - Lists 2: SLLists学习笔记
本文内容为重写上一节课中的单链表,将其重构成更易于用户使用的链表,实现多种操作链表的方法。 1. 重构单链表SLList 在上一节课中编写的 IntList 类是裸露递归的形式,在 Java 中一般不会这么定义,因为这样用户可能需要非常了解…...

【科研绘图系列】R语言绘制小提琴图、散点图和韦恩图(violin scatter plot Venn)
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载画图1画图2画图3画图4画图5画图6画图7参考介绍 【科研绘图系列】R语言绘制小提琴图、散点图和韦恩图(violin & scatter plot & Venn) 加载R包 library…...
Linux中POSIX应用场景
Linux 提供了丰富的 POSIX(Portable Operating System Interface)标准接口,这些接口可以帮助开发者编写可移植、高效的应用程序。POSIX 标准定义了一系列系统调用和库函数,涵盖了文件操作、进程管理、线程管理、信号处理、同步机制…...

量子算法导论
重学了量子算法,不知道是温故而知新,还是之前的教材没有讲过这个概念。 如果把(图灵机)计算机比作一个查询机器,输入x通过f(x)作用得出结果,而查询的过程就是计算的过程。 中文解释…...
nasm - BasicWindow_64
文章目录 nasm - BasicWindow_64概述笔记my_build.batnasm_main.asmEND nasm - BasicWindow_64 概述 学习网上找到的demo. x64和x86的汇编源码还差挺多的。 x64的汇编代码不好写,细节整不对,程序就不运行。 如果要查为啥不运行,也要看和正向…...

SpringBoot:SSL证书部署+SpringBoot实现HTTPS安全访问
一、前言 SSL协议介于TCP/IP协议栈的第四层(传输层)和第七层(应用层)之间,为基于TCP的应用层协议(如HTTP)提供安全连接。它通过在客户端和服务器之间建立一个加密的通道,确保数据在传…...

selenium爬取苏宁易购平台某产品的评论
目录 selenium的介绍 1、 selenium是什么? 2、selenium的工作原理 3、如何使用selenium? webdriver浏览器驱动设置 关键步骤 代码 运行结果 注意事项 selenium的介绍 1、 selenium是什么? 用于Web应用程序测试的工具。可以驱动浏览…...
Spark提交任务
1、Spark提交任务到Yarn 1.1、DwKuduApp spark-submit --class com.io.etl.dwkudu.DwKuduApp \ --files /etl/etl-dwkudu/conf/doris.property,/etl/etl-dwkudu/conf/redis.property,/etl/etl-dwkudu/conf/log4j.property \ --master yarn --deploy-mode cluster \ --driver-…...

游戏引擎学习第113天
仓库:https://gitee.com/mrxiao_com/2d_game_2 黑板:优化的基本过程 在游戏编程中,优化是一个非常重要的学习内容,尤其是想要成为专业开发者时。优化的核心是理解代码的执行速度,以及如何提升其性能。在这个阶段,已经…...
token是什么
在自然语言处理(NLP)和机器学习的背景下,token 是指模型在处理文本时的最小单位。通常,这个单位可以是单词、字符,或者词的一部分。具体来说,token 的定义取决于你使用的模型和它的分词方式。 举个例子&am…...

23. AI-大语言模型-DeepSeek赋能开发-Spring AI集成
文章目录 前言一、Spring AI 集成 DeepSeek1. 开发AI程序2. DeepSeek 大模型3. 集成 DeepSeek 大模型1. 接入前准备2. 引入依赖3. 工程配置4. 调用示例5. 小结 4. 集成第三方平台(已集成 DeepSeek 大模型)1. 接入前准备2. POM依赖3. 工程配置4. 调用示例…...
IPv6报头40字节具体怎么分配的?
目录 IPv6报头结构 字段详解 示例代码:IPv6报头的Python实现 输出示例 IPv6协议是为了解决IPv4地址耗尽问题而设计的下一代互联网协议。与IPv4相比,IPv6不仅提供了更大的地址空间,还简化了报头结构,提高了网络设备的处理效率。…...

驱动开发、移植
一、任务明确:把创龙MX8的驱动 按照我们的要求 然后移植到 我们的板子 1.Linux系统启动卡制作, sd卡 先按照 《用户手册—3-2-Linux系统启动卡制作及系统固化》 把创龙的Linux系统刷进去。 2. 把TLIMX8-EVM的板子过一遍 把刚刚烧好系统的sd卡插入 创…...

BFS与Flood Fill:算法原理、实现细节与复杂度分析
目录 1. 概述 2. BFS 的基本原理 3. Flood Fill 算法 4. BFS 实现 Flood Fill 的步骤 5. C 实现 6. 代码解析 7. 复杂度分析 8. 应用场景 总结 1. 概述 Flood Fill 算法是一种用于填充封闭区域的算法,常用于图像处理、绘图工具和游戏开发中。BFS(…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...