Skip to content

文件上传的消息格式

文件上传的本质仍然是一个数据提交,无非就是数据量大一些而已

在实践中,人们逐渐的形成了一种共识,我们自行规定,文件上传默认使用下面的请求格式

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类型告诉服务器

文件上传的实现

在现代的网页交互中,带表单的文件上传通常使用下面的方式实现

文件上传逻辑

后端开发服务器:http://localhost:8000

接口示例

统一上传接口

请求路径:/api/upload

请求方法:POST

字段名:file

尺寸限制:1M

支持的文件后缀:.jpg, .jpeg, .gif, .png, .bmp, .webp

上传成功的响应

js
{
	code: 0,
  msg: '',
  data: 'http://localhost:8000/upload/a32d18.jpg' // 访问路径
}

可能发生的失败响应

js
{
	code: 403,
	msg: '文件超过了限制',
	data: null
}
js
{
	code: 403,
	msg: '无效的文件类型',
	data: null
}

用户注册接口

请求路径:/api/user/reg

请求方法:POST

支持消息类型

  1. x-www-form-urlencoded
  2. json

字段

字段名含义是否必须
username账号
password密码
avatar头像

注册成功的响应

js
{
	code: 0,
  msg: '',
  data: {
    username: 'monica',
    avatar: 'http://localhost:8000/upload/a234wq1.jpg'
  }
}
0