Appearance
原则规范
- 安全性:前后端均应该对上传文件的类型进行限制,脚本类的文件统一禁止上传,具体可参考:信息安全 - 行为安全
- 文件大小:前后端均应该对上传文件的大小进行限制,默认只允许上传
10M
以内的文件,如项目需要超出该大小,则单独进行放宽并考虑是否需要用到对象存储(OSS)
- 文件链接:在返回文件的具体信息时应返回该文件的数据对象,默认需要返回该文件的具体的物理访问链接,如果该文件是加了鉴权访问,则需要返回该文件的具体目录
文件上传
- 后端统一使用框架通用(或自定义封装)的文件上传接口,不可一个项目,多个文件上传接口
- 前端在进行文件上传时,统一使用
文件流
进行传参,同时后端需要返回该文件的详情:
javascript
// 传参
const req = {
file: 'xxx' // File 文件流
}
// 返回值
const res = {
id: 'xxx', // 文件ID
name: 'xxx', // 文件名
type: 'png', // 文件类型(文件后缀) 如:png、jpg、pdf、doc等等
url: 'xxx' // 文件具体的访问链接(如:https://xxx/xxx/xxx.png) 或 具体目录(如:xxx/xxx/xxx/id)
}
业务关联规范
- 已上传的文件需与具体的业务进行关联时,需通过
文件ID
进行关联,传参的数据协议如下:
javascript
// 业务数据的新增/更新 传参
const req1 = {
userName: 'xxx',
avatar: 'id' // 通过文件上传时返回的文件ID值
}
const req2 = {
userName: 'xxx',
banner: ['id1', 'id2', 'id3'] // 多文件可通过ID数组/字符串进行传参
}
- 获取业务数据详情时,需要把已关联的文件数据以对象的形式返回,需要返回各个文件的具体信息,返回值的数据协议如下:
javascript
// 业务数据的详情 返回值
const res1 = {
userName: 'xxx',
avatar: {
id: 'xxx',
name: 'xxx',
type: 'png',
url: 'xxx'
} // 文件的详细信息
}
const res2 = {
userName: 'xxx',
banner: [
{
id: 'xxx',
name: 'xxx',
type: 'png',
url: 'xxx'
},
{
id: 'xxx',
name: 'xxx',
type: 'png',
url: 'xxx'
},
{
id: 'xxx',
name: 'xxx',
type: 'png',
url: 'xxx'
},
] // 多文件返回格式
}