文件上传的消息格式
文件上传的本质仍然是一个数据提交,无非就是数据量大一些而已
在实践中,人们逐渐的形成了一种共识,我们自行规定,文件上传默认使用下面的请求格式
POST 上传地址 HTTP/1.1
其他请求头
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="avatar"; filename="小仙女.jpg"
Content-Type: image/jpeg
(文件二进制数据)
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="username"
admin
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="password"
123123
----WebKitFormBoundary7MA4YWxkTrZu0gW
- 除非接口文档特别说明,文件上传一般使用POST请求
- 接口文档中会规定上传地址,一般一个站点会有一个统一的上传地址
- 除非接口文档特别说明,
content-type: multipart/form-data,浏览器会自动分配一个定界符boundary - 请求体的格式是一个被定界符
boundary分割的消息,每个分割区域本质就是一个键值对 - 除了键值对外,
multipart/form-data允许添加其他额外信息,比如文件数据区域,一般会把文件在本地的名称和文件MIME类型告诉服务器
文件下载的消息格式
服务器只要在响应头中加入Content-Disposition: attachment; filename="xxx"即可触发浏览器的下载功能
其中:
- attachment 表示附件,浏览器看到此字段,触发下载行为(不同的浏览器下载行为有所区别)
- filename=”xxx”,这是告诉浏览器,保存文件时使用的默认文件名
这部分操作是由服务器完成的,和前端开发无关
启用迅雷下载
用户可能安装了某些下载工具,这些下载工具在安装时,都会自动安装相应的浏览器插件,只要对下载地址稍作修改,就会触发浏览器使用插件进行下载,当然,不同插件的地址规则不同
比如,迅雷的下载地址规则为:
thunder://base64(AA地址ZZ)




