浅谈 JSON 对象和 FormData 相互转换,打通前端与后端的通信血脉_json转formdata

news/2025/2/3 23:56:54/

在这里插入图片描述


formData 请求头:

在这里插入图片描述


formData 负荷:

在这里插入图片描述


通过上面的几张图我们就能大概明白了,前端传的都是二进制数据,两者的 content-type 是不同的,json 我们已经序列化好了,而 formdata 还是需要进行处理。

formdata 的两种格式

  • multipart/form-data:既可以上传文件等二进制数据,也可以上传表单键值对,只是最后会转化为一条信息;
  • x-www-form-urlencoded:只能上传键值对,并且键值对都是间隔分开的。

json__formData_64">json 对象转 formData

逐个转换

let obj = {id: "001",name: "小蓝",age: "18",sex: "女",
};
const formData = new FormData();
formData.append("id", obj.id);
formData.append("name", obj.name);
formData.append("age", obj.age);
formData.append("sex", obj.sex);
console.log(formData);

所有属性值转换

let obj = {id: "001",name: "小蓝",age: "18",sex: "女",
};
const formData = new FormData();
Object.keys(obj).map((key) => {formData.append(key, obj[key]);
});
console.log(formData);

json_121">formData 对象转 json

var jsonObj = {};
formData.forEach((value, key) => (jsonObj[key] = value));

拓展 – base64 和文件流互转

文件流转 base64

<template><div><input type="file" @change="handleFileChange" /></div>
</template><script>
export default {methods: {handleFileChange(event) {// 获取用户选择的文件const file = event.target.files[0];// 创建一个FileReader对象const reader = new FileReader();// 当文件读取完成后触发的事件处理程序reader.onload = () => {// 获取文件流const base64 = reader.result;// 在这里进行base64编码的处理console.log(base64);};// 读取文件流reader.readAsDataURL(file);},},
};
</script>

在这里插入图片描述

base64 转文件流

<template><div></div>
</template><script>
export default {mounted() {// Base64字符串;let base64String = "data:image/png;base64"base64String = this.convertBase64ToBlob(base64String);console.log(base64String);},methods: {convertBase64ToBlob(base64String) {// 将Base64解码为二进制数据const byteCharacters = atob(base64String.split(",")[1]);// 创建一个Uint8Array来存储二进制数据const byteArrays = new Uint8Array(byteCharacters.length);for (let i = 0; i < byteCharacters.length; i++) {byteArrays[i] = byteCharacters.charCodeAt(i);}// 创建Blob对象const blob = new Blob([byteArrays], { type: "text/plain" });// 将Blob对象转换为File对象const file = new File([blob], "filename", { type: "text/plain" });return file;},},
};
</script>

在这里插入图片描述

相关推荐

⭐ 深入理解qs库:简化你的工作流程


http://www.ppmy.cn/news/1569091.html

相关文章

ubuntu无法上网的解决办法

Ubuntu系统无法联网可能有多种原因&#xff0c;以下是一些常见的排查步骤和解决方法&#xff1a; 1. 检查网络连接状态 首先&#xff0c;确认网络接口是否已启用。 ip a查看网络接口&#xff08;如eth0、wlan0&#xff09;是否有IP地址。如果没有&#xff0c;可能是接口未启…

基于Python的药物相互作用预测模型AI构建与优化(上.文字部分)

一、引言 1.1 研究背景与意义 在临床用药过程中,药物相互作用(Drug - Drug Interaction, DDI)是一个不可忽视的重要问题。当患者同时服用两种或两种以上药物时,药物之间可能会发生相互作用,从而改变药物的疗效、增加不良反应的发生风险,甚至危及患者的生命安全。例如,…

Rust语言的编程范式

Rust语言的编程范式 引言 在现代编程语言中&#xff0c;Rust以其独特的编程范式和内存管理机制脱颖而出。Rust不仅关注性能与安全性&#xff0c;还通过其独特的语法和强大的工具链&#xff0c;引导开发者采取更好的编程实践。本文将深入探讨Rust语言的编程范式&#xff0c;包…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.12 连续数组:为什么contiguous这么重要?

2.12 连续数组&#xff1a;为什么contiguous这么重要&#xff1f; 目录 #mermaid-svg-wxhozKbHdFIldAkj {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-wxhozKbHdFIldAkj .error-icon{fill:#552222;}#mermaid-svg-…

【C++动态规划 离散化】1626. 无矛盾的最佳球队|2027

本文涉及知识点 C动态规划 离散化 LeetCode1626. 无矛盾的最佳球队 假设你是球队的经理。对于即将到来的锦标赛&#xff0c;你想组合一支总体得分最高的球队。球队的得分是球队中所有球员的分数 总和 。 然而&#xff0c;球队中的矛盾会限制球员的发挥&#xff0c;所以必须选…

MySQL基本架构SQL语句在数据库框架中的执行流程数据库的三范式

MySQL基本架构图&#xff1a; MySQL主要分为Server层和存储引擎层 Server层&#xff1a; 连接器&#xff1a;连接客户端&#xff0c;获取权限&#xff0c;管理连接 查询缓存&#xff08;可选&#xff09;&#xff1a;在执行查询语句之前会先到查询缓存中查看是否执行过这条语…

SQL UCASE() 函数详解

SQL UCASE() 函数详解 在SQL中&#xff0c;UCASE() 函数是一个非常有用的字符串处理函数&#xff0c;它可以将字符串中的所有小写字母转换为大写字母。本文将详细介绍UCASE() 函数的用法、语法、示例以及其在实际应用中的优势。 一、UCASE() 函数简介 UCASE() 函数是SQL标准…

经典蓝牙协议:【A2DP,HSP/HFP,OBEX/OPP】

经典蓝牙&#xff0c;也称为传统蓝牙&#xff0c;通常指的是蓝牙协议4.0以下的版本&#xff0c;包括v1.1、1.2、2.0、2.1和3.0等。这些版本的蓝牙协议支持音频&#xff08;如HFP/HSP, A2DP&#xff09;和数据&#xff08;如SPP, HID, OPP, PBAP等&#xff09;两大类协议。其中&…