【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(…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...
