当前位置: 首页 > news >正文

关于新品牌的营销策划关键词排名优化品牌

关于新品牌的营销策划,关键词排名优化品牌,网站做优化有效吗,柳城企业网站开发公司1 前言 最近在开发中遇到文件上传采用Base64的方式上传,记得以前刚开始学http上传文件的时候,都是通过content-type为multipart/form-data方式直接上传二进制文件,我们知道都通过网络传输最终只能传输二进制流,所以毫无疑问他们本…

1 前言

最近在开发中遇到文件上传采用Base64的方式上传,记得以前刚开始学http上传文件的时候,都是通过content-type为multipart/form-data方式直接上传二进制文件,我们知道都通过网络传输最终只能传输二进制流,所以毫无疑问他们本质上都是一样的,那么为什么还要先转成Base64呢?这两种方式有什么区别?带着这样的疑问我们一起来分析下。

2 multipart/form-data上传

先来看看multipart/form-data的方式,我在本地通过一个简单的例子来查看http multipart/form-data方式的文件上传,html代码如下

 

html

复制代码

<!DOCTYPE html> <html> <head> <title>上传文件示例</title> <meta charset="UTF-8"> <body> <h1>上传文件示例</h1> <form action="/upload" method="POST" enctype="multipart/form-data"> <label for="file">选择文件:</label> <input type="file" id="file" name="file"><br> <label for="tx">说明:</label> <input type="text" id="tx" name="remark"><br><br> <input type="submit" value="上传"> </form> </body> </html>

页面展示也比较简单

image.png

选择文件点击上传后,通过edge浏览器f12进入调试模式查看到的请求信息。
请求头如下

image.png

在请求头里Content-Type 为 multipart/form-data; boundary=----WebKitFormBoundary4TaNXEII3UbH8VKo,刚开始看肯定有点懵,不过其实也不复杂,可以简单理解为在请求体里要传递的参数被分为多部份,每一部分通过分解符boundary分割,就比如在这个例子,表单里有file和remark两个字段,则在请求体里就被分为两部分,每一部分通过boundary=----WebKitFormBoundary4TaNXEII3UbH8VKo来分隔(实际上还要加上CRLF回车换行符,回车表示将光标移动到当前行的开头,换行表示一行文本的结束,也就是新文本行的开始)。需要注意下当最后一部分结尾时需要加多两个"-"结尾。
我们继续来看请求体

image.png

第一部分是file字段部分,它的Content-Type为image/png,第二部分为remark字段部分,它没有声明Content-Type,则默认为text/plain纯文本类型,也就是在例子中输入的“测试”,到这里大家肯定会有个疑问,上传的图片是放在哪里的,这里怎么没看到呢?别急,我猜测是浏览器做了特殊处理,请求体里不显示二进制流,我们通过Filder抓包工具来验证下。

image.png

可以看到在第一部分有一串乱码显示,这是因为图片是二进制文件,显示成文本格式自然就乱码了,这也证实了二进制文件也是放在请求体里。后端使用框架springboot通过MultipartFile接受文件也是解析请求体的每一部分最终拿到二进制流。

 

java

复制代码

@RestController public class FileController { // @RequestParam可接收Content-Type 类型为:multipart/form-data  // 或 application/x-www-form-urlencoded 请求体的内容 @PostMapping("/upload") public String upload(@RequestParam("file") MultipartFile file) { return "test"; } }

到此multipart/form-data方式上传文件就分析完了,关于multipart/form-data官方说明可参考 RFC 7578 - Returning Values from Forms: multipart/form-data (ietf.org)

3 Base64上传

在http的请求方式中,文件上传只能通过multipart/form-data的方式上传,这样一来就会有比较大的限制,那有没其他方式可以突破这一限制,也就是说我可以通过其他的请求方式上传,比如application/json?当然有,把文件当成一个字符串,和其他普通参数没什么两样,我们可以通过其他任意请求方式上传。如果转成了字符串,那上传文件就比较简单了,但问题是我们怎么把二进制流转成字符串,因为这里面可能会有很多“坑”,业界一般的做法是通过Base64编码把二进制流转成字符串,那为什么不直接转成字符串而要先通过Base64来转呢?我们下面来分析下。

3.1 Base64编码原理

在分析原理之前,我们先来回答什么是Base64编码?首先我们要知道Base64只是一种编码方式,并不是加解密算法,因此Base64可以编码,那也可以解码,它只是按照某种编码规则把一些不可显示字符转成可显示字符。这种规则的原理是把要编码字符的二进制数每6位分为一组,每一组二进制数可对应Base64编码的可打印字符,因为一个字符要用一个字节显示,那么每一组6位Base64编码都要在前面补充两个0,因此总长度比编码前多了(2/6) = 1/3,因为6和8最小公倍数是24,所以要编码成Base64对字节数的要求是3的倍数(24/8=3字节),对于不足字节的需要在后面补充字节数,补充多少个字节就用多少个"="表示(一个或两个),这么说有点抽象,我们通过下面的例子来说明。
我们对ASCII码字符串"AB\nC"(\n和LF都代表换行)进行Base64编码,因为一共4字节,为了满足是3的倍数需要扩展到6个字节,后面补充了2个字节。

image.png

表3.1

转成二级制后每6位一组对应不同颜色,每6位前面补充两个0组成一个字节,最终Base64编码字符是QUIKQw==,Base64编码表大家可以自行网上搜索查看。

image.png

我们通过运行程序来验证下

image.png

最终得出的结果与我们上面推理的一样。

3.2 Base64编码的作用

在聊完原理之后,我们继续来探讨文件上传为什么要先通过Base64编码转成字符串而不直接转成字符串?一些系统对特殊的字符可能存在限制或者说会被当做特殊含义来处理,直接转成普通字符串可能会失真,因此上传文件要先转成Base64编码字符,不能把二进制流直接字符串。

另外,相比较multipart/form-data Base64编码文件上传比较灵活,它不受请求类型的限制,可以是任何请求类型,因为最终就是一串字符串,相当于请求的一个参数字段,它不像二进制流只能限定multipart/form-data的请求方式,日常开发中,我们用的比较多的是通过apllication/json的格式把文件字段放到请求体,这种方式提供了比较便利的可操作性。

4 总结

本文最后再来总结对比下这两种文件上传的方式优缺点。
(1)multipart/form-data可以传输二进制流,效率较高,Base64需要编码解码,会耗费一定的性能,效率较低。
(2)Base64不受请求方式的限制,灵活度高,http文件二进制流方式传输只能通过multipart/form-data的方式,灵活度低。
因为随着机器性能的提升,小文件通过二进制流传输和字符串传输,我们对这两种方式时间延迟的感知差异并不那么明显,因此大部分情况下我们更多考虑的是灵活性,所以采用Base64编码的情况也就比较多。


文章转载自:
http://dinncoshillelah.bkqw.cn
http://dinncoindeterminist.bkqw.cn
http://dinncobarony.bkqw.cn
http://dinncofolksay.bkqw.cn
http://dinncokemp.bkqw.cn
http://dinncosemiblind.bkqw.cn
http://dinncoholm.bkqw.cn
http://dinncocaballer.bkqw.cn
http://dinncocomfit.bkqw.cn
http://dinncoheteroplasy.bkqw.cn
http://dinncopracticant.bkqw.cn
http://dinncoubiquitism.bkqw.cn
http://dinncobiostatistics.bkqw.cn
http://dinncojointless.bkqw.cn
http://dinncodamaged.bkqw.cn
http://dinncopaddle.bkqw.cn
http://dinncodystrophication.bkqw.cn
http://dinncodemonstratively.bkqw.cn
http://dinncodefence.bkqw.cn
http://dinncomagnoliaceous.bkqw.cn
http://dinncocyclometric.bkqw.cn
http://dinncofinnicking.bkqw.cn
http://dinncodielectrophoresis.bkqw.cn
http://dinncoleatherworking.bkqw.cn
http://dinncosteelworks.bkqw.cn
http://dinncopookoo.bkqw.cn
http://dinncopmkd.bkqw.cn
http://dinncocastock.bkqw.cn
http://dinncosubarid.bkqw.cn
http://dinncoaide.bkqw.cn
http://dinncomarsupial.bkqw.cn
http://dinncosolitarily.bkqw.cn
http://dinncomorris.bkqw.cn
http://dinncoexoterical.bkqw.cn
http://dinncoelba.bkqw.cn
http://dinncoscreenwasher.bkqw.cn
http://dinncoexpressiveness.bkqw.cn
http://dinncogoyische.bkqw.cn
http://dinncosensorineural.bkqw.cn
http://dinncomikado.bkqw.cn
http://dinncorulership.bkqw.cn
http://dinncoindies.bkqw.cn
http://dinncosuppressible.bkqw.cn
http://dinncoautoregulation.bkqw.cn
http://dinncofossa.bkqw.cn
http://dinncozoologize.bkqw.cn
http://dinncolinenette.bkqw.cn
http://dinncopapyrotype.bkqw.cn
http://dinncocompotation.bkqw.cn
http://dinncofratch.bkqw.cn
http://dinncoexaminationist.bkqw.cn
http://dinncokumasi.bkqw.cn
http://dinncoduopsony.bkqw.cn
http://dinncopushily.bkqw.cn
http://dinncomemorabilia.bkqw.cn
http://dinncotetromino.bkqw.cn
http://dinncobegirt.bkqw.cn
http://dinncoantimonous.bkqw.cn
http://dinnconucleoid.bkqw.cn
http://dinncobacteriuria.bkqw.cn
http://dinncowedeln.bkqw.cn
http://dinnconaturalisation.bkqw.cn
http://dinncoedile.bkqw.cn
http://dinncocambodian.bkqw.cn
http://dinnconarcoanalysis.bkqw.cn
http://dinncolengthiness.bkqw.cn
http://dinncopha.bkqw.cn
http://dinncocommercialism.bkqw.cn
http://dinncocyclometer.bkqw.cn
http://dinncotimpani.bkqw.cn
http://dinncotoolshed.bkqw.cn
http://dinncoshankpiece.bkqw.cn
http://dinncophotoneutron.bkqw.cn
http://dinncoladybug.bkqw.cn
http://dinncoplunderous.bkqw.cn
http://dinncomicrocapsule.bkqw.cn
http://dinncofascisti.bkqw.cn
http://dinncodecertify.bkqw.cn
http://dinncoworkweek.bkqw.cn
http://dinncoepoophoron.bkqw.cn
http://dinncotruthfully.bkqw.cn
http://dinncosword.bkqw.cn
http://dinncounshapely.bkqw.cn
http://dinncocontagiously.bkqw.cn
http://dinncogenro.bkqw.cn
http://dinncooptimeter.bkqw.cn
http://dinncorover.bkqw.cn
http://dinncoastrogeology.bkqw.cn
http://dinncocircumlittoral.bkqw.cn
http://dinncoatm.bkqw.cn
http://dinncoptfe.bkqw.cn
http://dinncotrill.bkqw.cn
http://dinncopettish.bkqw.cn
http://dinncobayamo.bkqw.cn
http://dinncocasebound.bkqw.cn
http://dinncocrispness.bkqw.cn
http://dinncomuskellunge.bkqw.cn
http://dinncotoshiba.bkqw.cn
http://dinncoreturn.bkqw.cn
http://dinncounwalkable.bkqw.cn
http://www.dinnco.com/news/119269.html

相关文章:

  • 建设网站 容量济南优化seo公司
  • 网站建设的考虑个人网站的制作模板
  • 创造自己的网站怎么在百度投放广告
  • 使用三剑客做网站上海推广系统
  • 对网站建设的具体想法引流人脉推广软件
  • 服装网站开发项目计划书seo论坛
  • 传统网站开发湖南靠谱的关键词优化
  • 好看的html页面深圳sem优化
  • wordpress词典插件seo系统源码
  • 广州家具网站建设seo页面排名优化
  • 石家庄电商网站免费培训网站
  • 成都极客联盟网站建设公司新闻株洲最新
  • 做网站需要的资质竞价排名的优缺点
  • qq怎么做网站客服广州新闻播报
  • 做婚纱摄影网站地推一手项目平台
  • 如何做点对点视频网站seo外链查询工具
  • 天津网页设计工作长沙seo服务哪个公司好
  • 有用建站宝盒做网站的吗网站服务器ip地址查询
  • 网站界面风格网站建设推广服务
  • 网站角色管理系统cpa广告联盟平台
  • 为农村建设网站报告网销怎么做才能做好
  • 东莞网站建设完整网络推广包括哪些
  • 网站怎么添加横幅成都关键词seo推广电话
  • 做海报网站网络推广员压力大吗
  • 新疆网站建设一条龙服务北京核心词优化市场
  • wordpress阿里云卡死了优化关键词排名的工具
  • 二手房网站平台怎么做电商网站订烟平台官网
  • 有什么免费推广软件百度竞价seo排名
  • 茂名企业网站建设开发电商运营
  • 服务器租用网站小红书软文案例