2 xyz dream xyz_dream 于 2017.09.15 10:33 提问

html中文件上传的原理

大家都知道http是基于文本的协议,也就是说发送的无论是视频,音频,等等都会转换成
二进制字符串,然后传递给web服务器。一直纠结一件事,1.文件上传的时候,是不是
浏览器帮助我们把文件读取成为二进制字符串,然后附加一些文件类型,等等文件属性,
然后web服务器收到请求会相应的根据文件属性,把二进制字符串保留起来,加上
原来一样的后缀名和文件类型。也就达到了上传文件的目的。这样的理解是否正确?
请高手指教一下。
2.之后就是上传文件百分比%,是不是涉及到两边TCP通信问题,毕竟文件
太大(100M以上之类的)不可能客户端一次性读完,然后写到http请求头当中,还是什么?
求大神解惑

4个回答

sunny_desmond
sunny_desmond   2017.09.15 10:37

mark一下,等待大神回答

xyz_dream
xyz_dream   2017.09.15 10:40

一直比较疑惑,毕竟html只是一大堆字符串。不可能无缘无故通过 就能上传文件。肯定是浏览器在搞鬼 ,不过流程是不是上面我
猜想的,等待大神来回答

zy841958835
zy841958835   Ds   Rxr 2017.09.15 11:15

1.无论是http还是tcp还是rmi或者rpc等等 在网络上传输的都是以二进制码的形式,而你http的请求体重有content-type 这个就是你
告诉服务器你的二进制是个啥 它好按照对应的方式解析
2.这个进度就是你二进制上载的速度 比如 总共有100m 一秒钟之后还有99m没传那么此时进度就是1%

xyz_dream
xyz_dream 第二个理解了。百分比这个,茅塞顿开
2 个月之前 回复
w172087242
w172087242   Ds   Rxr 2017.09.15 11:15

楼主刚刚说的全部编码是不对的,在http协议体中的内容有三种编码方式:
1.application/x-www-form-urlencoded表示在发送前编码所有字符串
2.multipart/form-data不对字符编码(也就是说直接以二进制传输)
3.text/plain不对特殊字符进行编码

在http上传的时候默认是选择1来进行编码报文体的
但是在文件上传的时候,就需要设置第2中,才能正常进行文件上传
你可以通过http抓包观察,每个表单在报文体都有一个描述,服务端在解析http报文的时候
可以根据描述来确认发送的是哪一类的报文,从而对应解析

希望可以帮到你,有不明白的可以继续提问...

w172087242
w172087242 回复爱在南信: 如果有帮助的话,希望采纳
2 个月之前 回复
w172087242
w172087242 回复爱在南信: 楼上百分比的在http中有个重要的头是content-length,所以建议你了解一下http报文的结构,你感觉不清楚的问题,应该都能逐步理解
2 个月之前 回复
w172087242
w172087242 回复爱在南信: 只能是浏览器啊,因为http的底层实现是socket,浏览器相当于socket的客户端
2 个月之前 回复
xyz_dream
xyz_dream 嗯嗯。主要是上传过程是不是浏览器负责帮助我们读取文件变成所谓的二进制字符串,然后写到http请求报文中,完成上传请求
2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片