杂谈FormData

2023-11-09 13:46
文章标签 formdata 杂谈

本文主要是介绍杂谈FormData,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

FormData

FormData 对象是什么

FormData 对象是一个 HTML5 提供的 API,支持上传二进制文件和大型文本数据,在前端中上传图片时,我们通常会使用 FormData 对象来构造表单数据,并将其发送给后端

FormData 为什么能传递图片

传统的表单只能包含键值对(key-value pairs),而无法包含二进制数据。但是,FormData 对象可以包含二进制数据,例如图片文件。当我们使用 append() 方法向 FormData 对象中添加文件对象时,文件会被自动转换为二进制数据,并加入表单数据中

上传图片时,由于图片数据通常比较大,因此不能将其放在 URL 中。如果使用 GET 请求传递图片数据,则需要将图片数据转换为 Base64 编码格式,这样会造成数据冗余和传输效率低下。因此,我们通常使用 POST 请求传递图片数据,而在 POST 请求中,FormData 对象可以将图片数据包含在请求体中。

FormData的一些基本的操作方法与操作手续

创建 FormData 对象: 可以使用 new FormData() 方法创建一个新的 FormData 对象

const formData = new FormData();

添加值到 FormData 对象: 可以使用 append() 方法向 FormData 对象中添加新的键值对数据。该方法接受两个参数,第一个参数是键名,第二个参数是键值

formData.append('username', 'Tom');
formData.append('password', '123456');

还支持添加 Blob 对象

formData.append('file', blob, 'example.png');

删除 FormData 对象中的值: 可以使用 delete() 方法从 FormData 对象中删除指定的键名及其对应的键值

formData.delete('username');

获取 FormData 对象中的值: 可以使用 get() 方法从 FormData 对象中获取指定键名的键值

const username = formData.get('username');

application/json、application/x-www-form-urlencoded、form-data

application/json、application/x-www-form-urlencoded、form-data这三种格式是什么

这三种格式是常见的用于在客户端和服务器之间传输数据的格式

有什么作用

application/json 是一种数据传输格式,用于在客户端和服务器之间传递结构化的数据。它使用 JSON(JavaScript Object Notation)作为数据的表示方式,将数据序列化为字符串进行传输。JSON 格式具有良好的可读性、易于解析和生成,并被广泛支持和应用于各种编程语言和平台。

application/x-www-form-urlencoded 是一种常见的表单数据传输格式。它将表单数据按照 key-value 的形式进行编码,并使用 URL 编码格式进行表示。在客户端发送请求时,表单数据被编码为一个字符串,每个字段的键值对被连接起来,并用&符号分隔,例如key1=value1&key2=value2。这种格式主要用于 HTML 表单提交

multipart/form-data 是一种用于上传文件和表单数据的格式。它可以同时传输二进制文件和其他表单数据,适用于需要上传文件的场景

三者有什么区别

数据结构:application/json 使用 JSON 格式表示数据,可以传递复杂的、嵌套的数据结构;application/x-www-form-urlencoded 和 multipart/form-data 使用键值对的形式进行数据表示,适合传递较简单的数据结构。

适用场景:application/json 适用于传输结构化数据,常用于 RESTful API 中;application/x-www-form-urlencoded 适用于表单提交和较简单的数据传输;multipart/form-data 适用于文件上传和同时传输文件和表单数据的场景。

数据编码方式:application/json 使用 JSON 格式进行数据编码;application/x-www-form-urlencoded 使用 URL 编码格式进行数据编码;multipart/form-data 使用分隔符和多个部分进行数据编码。

文件上传支持:application/json 和 application/x-www-form-urlencoded 不直接支持文件上传,而 multipart/form-data 可以支持文件上传。

Blob URL与base64

是什么

blob:http://127.0.0.1:5500/d96d1b24-0a77-4010-b6c0-4d44ef95e485   Blob URL

Blob URL 是一种用于引用二进制数据的特殊 URL 格式。它指向浏览器中的二进制数据块(Blob 对象),可以是图像、音频、视频或其他文件类型。Blob URL 的格式是 blob:<origin>/<unique-id>,其中 <origin> 表示 URL 的来源,<unique-id> 是一个唯一的标识符

Base64 是一种编码方式,用于将二进制数据转换为纯文本字符串。它将二进制数据每三个字节为一组进行处理,然后将每组转换为四个字符的 Base64 字符串

什么区别

Blob URL 可以直接访问二进制数据,而不需要进行编码或解码。

Base64 编码后的数据可以方便地传输和存储,但需要进行编码和解码才能使用

canvas将内容转为blob,然后上传至后台

方法一、

let canvas = $('#canvas')
canvas.toBlob(blob => {const reader = new FileReader();reader.readAsDataURL(blob);reader.onload = function() {const file = new File([blob], 'fileName.jpg', { type: blob.type });// 现在,可以将生成的 file 对象作为参数传递到后台了uploadFile(file);}
});function uploadFile(file) {const formData = new FormData();formData.append('file', file);$.ajax({url: '/upload',type: 'POST',data: formData,processData: false,contentType: false,success: function(response) {console.log(response);},error: function(xhr, status, error) {console.error(error);}});
}

processData: false, contentType: false, 什么作用

processData: false:默认情况下,当使用jQuery.ajax()$.ajax()发送POST请求时,jQuery会将数据转换为查询字符串格式(key=value&key=value)并发送给服务器。但是,当你需要发送FormData、Blob、ArrayBuffer等特殊类型的数据时,你可以将processData设置为false,告诉jQuery不要对数据进行处理。这样将保持原始数据的格式,以便正确发送到服务器

contentType: false:默认情况下,当使用jQuery.ajax()$.ajax()发送POST请求时,jQuery会根据数据类型自动设置Content-Type头部。然而,当你发送FormData对象时,你需要将contentType设置为false,以便让浏览器自动设置正确的Content-Type头部(通常为multipart/form-data

方法二、

                canvas.toBlob((blob) => {const formData = new FormData();formData.append('file', blob, 'canvas.jpg');formData.append('name', 'My Canvas Image');$.ajax({url: '/upload',type: 'POST',data: formData,processData: false,contentType: false,success: function (response) {console.log(response);},error: function (xhr, status, error) {console.error(error);}});});

这篇关于杂谈FormData的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/376481

相关文章

认知杂谈52

今天分享 有人说的一段争议性的话 I I 1拓展人脉很重要** 咱们活在这世上啊,得明白一件事儿,知识、逻辑能力和实战经验虽然重要,但确实都不是最关键的。真正关键的是要懂得怎么和那些手里有资源的人打交道。人脉那可真是一笔无形的大财富呢。你想想看,有时候一个有影响力的人帮你一把,那效果可比你累死累活干一年都强得多。 I I 就比如说,你要是认识个行业里的大牛,他可能给你介绍个特别好的工

认知杂谈54

I I 内容摘要: 这篇内容主要有以下几个要点:首先,沟通不在一个调时可学习人际交往心理学知识、线上课程及关注名师来改善。其次,挑房子、工作、搭档和人生伴侣要谨慎,找心灵相通能共同进步的人。再者,远离负能量的人,多跟积极向上的人相处攒正能量。然后,人生如爬山,要专注自身步伐,不与他人比较,坚持目标,可通过看《微习惯》、用专注 APP、参加训练营提升专注力和自律能力。此外,别瞎操心他人,每个人有自

杂谈:再次写给我们这些浮躁的程序员

再次写给我们这些浮躁的程序员     多做项目,多思考 不要害怕做事,刚毕业的同学最缺的就是工作经验,乱七八糟的项目能让你很快就了解了一个公司的业务与使用的技术,并且可以多接触同事与客户。 当你毕业后刚进一家公司时,如果主管没有把你安排到项目组工作,那真的很杯具,因为他认为你还不能胜任工作或者你的加入会让项目组更糟。 还有人说,我刚进公司,公司就把我当成了苦工,工资又低,项目组加入好几个,也做

认知杂谈47

今天分享 有人说的一段争议性的话 I I 一、价值观是否契合 价值观那可是两个人能不能长久在一起的重要根基。要是价值观差得太多,在好多大事上肯定容易闹矛盾、起冲突。 I I 人生目标是否一致:就比如说,一方就想过那种安安稳稳、平平淡淡的日子,每天按部就班地朝九晚五,能有更多时间陪陪家人。可另一方呢,一门心思追求事业上的大成功,为了工作啥个人时间都舍得牺牲。要是两个人在人生目标上差这么大,

#杂谈#TestDeploy,期待突破性的IDEA

近一个月有点疯狂,一口气将TestDeploy更新了好几个版本,搞了不少优化和增加一些有用的功能,中间还出了一些小插曲。这些更新版本中,变化比较大的是v2.3.0和v2.5.0。 v2.3.0主要搞了日志规范化管理、镜像源优化和Pipeline脚本。国内镜像源,由于莫名原因,很多都用不了了,连阿里云镜像源也不例外,所以特意去搞了几个,在v2.6.0还支持了私库。新增Pipeline脚本,以前的版

认知杂谈36

今天分享 有人说的一段争议性的话 《爷们儿,高手避坑指南》 嘿,爷们儿!人生处处有陷阱,稍不留意就可能让你的人生轨迹严重跑偏。 I 今天咱就从高手的视角聊聊这些硬派的人生感悟,这可都是无数前辈爷们用血汗换来的教训。 I 咱分享给你,就是希望你能避开那些坑,让你的黄金岁月走在正道上,闪闪发光。 I 要知道,男人的青春无比珍贵,是在烂泥里挣扎还是在康庄大道上飞驰,结果天差地别。 I 就像有的陷

认知杂谈34

今天分享 有人说的一段争议性的话 I 环境的影响 I 首先得说说,环境这东西对人的影响真不是盖的。你要是老待在一个死气沉沉的地方,那你的激情和梦想,可能慢慢就会被磨得平平无奇。 I 激情的消逝 I 本来你可能是满怀激情,想要大干一场,但时间一长,那些日常的琐事就像小浪花一样,慢慢把你的激情拍散了。 I 生活的妥协 I 然后你可能就觉得,生活嘛,不就是得过且过,吃喝玩乐,遇到问题就随便应付一下

互联网杂谈

专业人士解读:为什么在中国“公有云”落地那么难? [url]http://www.oschina.net/news/35162/why-public-cloud-is-difficult-in-china[/url] 云领域:且看亚马逊、Rackspace、微软及谷歌四国争霸 [url]http://www.csdn.net/article/2012-12-06/2812559-ar

认知杂谈30

今天分享 有人说的一段争议性的话 I I 《豁然开朗:男性成长的关键转折》 在男人的人生旅程当中啊,最金贵的可不是那些让人眼馋的钱财啥的,也不是啥惊天动地的事儿,更不是偶尔碰到的贵人帮忙。真正无价的宝贝呢,是在某个瞬间突然就“豁然开朗”了。在那个时候啊,就好像心里的大门一下子被推开了,阳光“哗”地一下照进心里头,前面的路一下子就看得清清楚楚了。这就是豁然开朗的神奇之处,它就跟黑夜里的灯塔似

认知杂谈29

今天分享 有人说的一段争议性的话 I I 《人生道理得自悟》 嘿,朋友们!咱今天敞开了好好唠唠。可能有的人会觉得我说的这些话呀,那可真是老得不能再老了,一点新鲜劲儿都没有,根本就听不进去。就好像耳朵里塞了两大团棉花似的,那是一点都进不到心里去啊。但咱可得好好琢磨琢磨,真正的道理就明晃晃地摆在那儿呢,得靠你自己去慢慢想明白。懂的人呢,一下子就能明白这里头的意思;不懂的人呢,那就得自己去撞撞南墙