上传文件的几种方式
我这里介绍2种上传文件的方式,一个是普通上传,另一个是断点续传;
普通上传
1. 一般上传前端就用组件库的上传组件,然后上传的数据传给接口就ok。
2. 再者前端多一个进度条;
思路一:前端可规律性的在设置一段时间后就增加进度条,然后接口成功返回了,就设置100%,
很有可能会卡在最后一个阶段很久直到接口成功返回上传成功最后设置进度条100%,也很有可能前面的几个阶段很慢然后从中间阶段直接就蹦到100%。
4. 前端判断上传文件的类型,比如图片类的,一般情况下前端用文件的后缀去判断图片类型,如.png,.jpg等,
但是这样容易让恶意攻击的趁虚而入,代码注入,攻击服务器,
如恶意攻击的也把后缀改成:恶意文件.png,然后前端用上面的判断方式,就会让恶意文件也上传上去。
可用文件的二进制字符去判断文件类型。比如png,jpg等都有判断类型的固定二进制类型,
每个图片都有固定的格式,png,jpg等的格式就是那样定义的,其实是16进制,
但是展开后还是2进制,vscode安装一个查看文件或者图片的二进制源文件的一个插件。
断点续传
当上传的文件比较大,比如大的视频等,则使用断点续传的方式:
如何做?
思路:
先把大的文件拆分成多个小的片段,可每个固定大小为128k或者1兆,
去一个个上传,分块上传,
每个片段都有唯一的编号,
后端拿到片段后,最后根据编号去拼成完整的文件;
问题: 如果中间断了,前端怎么知道传到哪一部分呢?
后端可以给前端返回一个目前已经上传的片段,前端从后端已经上传的片段,可用阿拉伯数字标记一下,前端上传未标记的未上传的剩余片段。