- 基于webscoket的文件上传,支持断点续传
1. 文件名 是通过下划线 "_" 分割各个部分
2. 唯一性具体校验哪些字段 ?比如识别号 + 识别方法 + 保险类型?联合唯一还是 识别号唯一 等
(隐含的含义为每个文件名也具有唯一性)
3. 只需要保存本次上传记录即可,即不需要历史上传记录表
4. 如何生成待生效数据以及关联附件表(需要4张表, 及表的大概含义)
5. 小工具需要登录, socket连接需要拦截登录状态, 支持断点续传(同一个用户, 在规定时间内(如一周内)对同一个文件可续传),支持文件进度,支持上传速度。
- 若前端header中可以携带cookie信息,则无需额外处理
- 若前端无法在握手时在header中携带cookie信息,则需在soket地址中携带sessionId
形如:/ws/upload?sid=sessionId
统一返回json字符串
{
"code" : 0, // 0 - 表示正常,此时关注command 指令字段以及data数据字段; 非0- 表示异常,此时关注msg错误提示字段
"msg" : null,// 错误时的提示信息
"command" : "", // 正常时候的指令信息
"data" : null //正常时候的数据信息,可能存在,可能不存在,结合command,对应不同的数据格式
}
code |
msg |
备注 |
1001 |
用户名或密码错误 |
|
1002 |
用户被禁用 |
|
2001 |
不合法指令 |
|
2002 |
创建文件失败 |
|
2003 |
上传任务尚未初始化 |
|
2004 |
上传文件分片错误 |
|
2005 |
文件长度溢出 |
|
2006 |
不合法文件业务类型 |
|
2007 |
当前文件正在上传处理中 |
文件正在上传中或者没有处理完毕 |
3001 |
不存在的参数项 |
|
3003 |
识别号已存在 |
|
¶ command 指令信息说明
command |
说明 |
备注 |
init |
客户端请求初始化: 请求文件上传的时候 |
参见初始化请求 |
ready |
服务端已准备好: 客户端可以发送二进制文件了 |
若是续传,则data对应已经上传的长度 |
progress |
服务端告知客户端进度信息 |
参见 文件上传进度信息 |
finished |
服务端告知客户端文件上传完成 |
|
{
"command" : "init", //须为init指令
"type" : null, //文件类型 :warrant-权证, insurance-保险
"total" : 0, //文件长度总
"filename" : "xxx-xxx-xx.pdf",//文件名
"seq" : 0 //当前片段序号
}
当服务端返回的command为progress时的data数据格式
{
"progress" : 0,//上传进度 0 -100
"speed" : "5M/s" //上传速度 如 500K/s
}
请求地址
POST
: /login
请求参数:
参数 |
数据类型 |
必填 |
参数说明 |
username |
String |
Y |
用户名 |
password |
String |
Y |
密码 |
响应结果:
{
"code": 0,//成功为0 ,其他错误码参见 后端统一错误码
"msg": "",//失败时候的说明
"data": {
"user": {
"id": "1",
"username": "admin",
"name": "stlgy管理员",
"enabled": true
},
"sessionId": "3E933DCDA7E35230DE57A3B80B903B39"
},
"success": true
}
请求地址
POST|GET
: /logout
请求参数:
无
响应结果:
{
"code": 0,//成功为0
"msg":"",//失败时候的说明
"data":null
}
在文件上传之前先进行文件名的校验,主要关注当前识别号是否已经存在。存在的时候可以强制上传。
另外,在发起socket上传请求的时候,依然会校验其他类型,但不再进行唯一性校验。
请求地址
POST|GET
: /check
请求参数:
参数 |
数据类型 |
必填 |
参数说明 |
filename |
String |
Y |
文件名 |
type |
String |
Y |
类型:warrant-权证;insurance-保险 |
响应结果:
{
"code": 0,//成功为0 ,其他错误码参见 后端统一错误码
"msg":"",//失败时候的说明
"data": null
}
仅从数据库中查询出最后几条权证或保险信息,以及对应的附件信息,未做转义,仅用于测试
请求地址
POST|GET
: /find
请求参数:
| 参数 | 数据类型 | 必填 | 参数说明 |
| ------ | -------- | ---- | --------------------- | |
| type | String | Y | 类型:warrant-权证;insurance-保险|
响应结果:
{
"code": 0,//成功为0 ,其他错误码参见 后端统一错误码
"msg":"",//失败时候的说明
"data": null //list列表 显示最后10条信息:附件信息 + 列表信息,均未转义
}
代码地址: