学习如何设计网站对职业发展有何益处?
摘要:学网站建设有什么用,dw网站设计作品,微网站怎么做,wordpress动画轮播代码教程一直在用组件库做文件上传,那里面的原理到底是啥,自己写能不能写一个upload框出来呢? &a
学网站建设有什么用,dw网站设计作品,微网站怎么做,wordpress动画轮播代码教程一直在用组件库做文件上传#xff0c;那里面的原理到底是啥#xff0c;自己写能不能写一个upload框出来呢?
#xff08;一#xff09;基本原理
浏览器端提供了一个表单#xff0c;在用户提交请求后#xff0c;将文件数据和其他表单信息编码并上传至服务器端#xff0…一直在用组件库做文件上传那里面的原理到底是啥自己写能不能写一个upload框出来呢?
一基本原理
浏览器端提供了一个表单在用户提交请求后将文件数据和其他表单信息编码并上传至服务器端服务器端将上传的内容进行解码了提取出 HTML 表单中的信息将文件数据存入磁盘或数据库。
就是编码-解码-放数据库其实。
浏览器采用默认的编码方式是 application/x-www-form-urlencoded 可以通过指定 form 标签中的 enctype 属性使浏览器知道此表单是用 multipart/form-data 方式编码如
form enctypemultipart/form-data
action${pageContext.request.contextPath}/servlet/uploadServlet2 methodpost 二详解
2.1编码篇
我们在上传文件的时候用的编码都是form-data的形式不上传文件的时候都是用application/x...的格式这是为啥呢
总的来说application传输二进制文件或者非ASCII码字符的时候会对数据进行大量转义导致传输效率低下而且也不支持多文件传输。 相对的form-data的数据处理形式就比较适合传输文件他会把表单数据分成多个部分每个部分有自己的头部信息和数据内容而且还用分隔符分割数据内容可以是文本或二进制数据可以是文件或表单字段的值。他还支持多文件多表单数据的传输所以经常用他来传输文件。
但大文件上传就不用这个了用的是application/octet-stream后面再说。
2.1.1 常见的application/x-www-form-urlencoded
如果你打开network就知道很多表单提交请求都是用的application/x-www-form-urlencoded这个编码方式编码结果就是namexiaomingage18 在这种编码格式中所有字段名和值都被URL编码并使用等号分隔。每个字段之间使用与号分隔。但让他来处理数据庞大的二进制数据或者包含非 ASCII 字符的数据的时候就会显得力不从心。因为它是一种文本格式只能处理 ASCII 字符集中的字符无法处理二进制数据。在该编码格式中所有的非 ASCII 字符都需要进行编码这会导致二进制数据被大量转义使得数据量变得非常大传输效率低下。另外该编码格式也不支持多部分传输无法将多个文件或多个表单字段一起传输。因此如果需要传输二进制文件或多个表单字段应该使用其他编码格式如 multipart/form-data。该编码格式支持二进制数据和多部分传输可以更有效地传输文件和表单数据。 2.1.2 multipart/form-data
使用这个编码的时候会把表单数据分成多个部分每个部分都有自己的头部信息和数据内容。各部分之间用一个不可能出现的分隔符分隔分隔符由一个随机字符串和两个连字符组成例如–boundary。每部分都对应表单中的一个input区 这种编码方式先定义好 一个不可能在数据中出现的字符串作为分界符然后用它将各个数据段 分开而对于每个数据段都对应着 HTML 页面表单中的一个 Input 区包括一个 content-disposition 属性说明了这个数据段的一些信息如果这个数据段的内容是一个文件还会有 Content-Type 属性然后就是数据本身。 头部信息有这个部分的类型、名称和其他元数据。对于文件上传还包含了文件名和文件类型等信息。数据内容可以是文件或者表单的值。 multipart/form-data 是一种常见的编码格式用于在 HTTP 协议中传输二进制数据和多部分数据。它通常用于上传文件或提交包含多个表单字段的表单数据。 在 multipart/form-data 编码中数据被分成多个部分每个部分都有自己的头部信息和数据内容。每个部分之间用一个特殊的分隔符分隔分隔符由一个随机字符串和两个连字符组成例如–boundary。 每个部分的头部信息包含了该部分的类型、名称和其他元数据。对于文件上传头部信息还包含了文件名和文件类型等信息。数据内容可以是文本或二进制数据可以是文件或表单字段的值。 multipart/form-data 编码格式支持上传多个文件和多个表单字段可以同时上传多个文件和表单字段。
