Skip to content

Latest commit

 

History

History
25 lines (14 loc) · 1.5 KB

项目难点.md

File metadata and controls

25 lines (14 loc) · 1.5 KB

1.文件上传的难点,

在即时聊天框里面我们会有点击上传文件的按钮,就是document.createElement('input'), input.type='file', input.style.display.none = 'node',隐藏默认的上传表单,

document.body.appendChild(input), input.click(),

第一版的时候,上传完成才会渲染在页面上面,经过优化,需要改成渲染在页面+进度条。在上传的接口,通过axios的事件onUploadProgress获取上传文件的进度。

因为现在的关系是,我在input点击上传的时候,会获取文件信息,然后把文件信息直接渲染成上传文件的组件框+进度条。

所以在调用上传接口的时候,需要把现在上传文件的req_id保存在假文件的对象数组里面,

然后再把上传接口返回的e.loaded和e.total放入以他们req_id为键名的对象数组里面,如果上传文件多,得保持上传顺序不变,现在就是谁的req_id在后端请求成功返回200,直接删除这个对象数组里面的这个值,

隐藏进度条,让真实返回的数据把之前假的数据覆盖掉,用户可以点击打开文件。

如果请求多了或者有失败的,根据req_id,和后端返回来的,渲染感叹号在上面,

有一个技术点是,因为没有会用浏览器数据库,所以这次发送失败的文件在下次拉取聊天记录时,是不会存在的,所以如果用户在没有上传完或者上传失败时候不小心点击刷新网页, 可能并不知道自己消息发过去了没。