大文件上传总结

上次被面试官问了excel文件上传文件太大怎么办?当时哑口无言,现在做一个总结。

文件上传的策略有问常用的的formdata表单(是一种异步上传),但是这个是一次性上传的,失败了就会重新上传,这个策略会经常超时,一旦网络不好或者文件太大就会失败,更不能断点续传,像百度网盘那样子可以暂停上传然后再重新开始。

网上还有的说把文件内容编码成一个字符串传过去相当于加码(利用例如base64编码)然后接收端解码就行,但是这种方案加码后的数据体积比原来的体积还大,所以一般不采取。

直接获取文件的二进制内容传输,但是这种也是一次上传,整个一起上传的

大文件上传或者断点上传只能把文件分块上传

http的状态码206的本意是范围请求响应,就是获得一部分数据的响应报文,结合请求/响应报文的首部字段rang,if=Rang,context-range来说明数据范围。这个是http1.1才有的。但这些http字段是支持断点下载的,不支持断点上传。所谓断点续传,也就是要从文件已经下载的地方开始继续下载。在以前版本的HTTP协议是不支持断点下载的,HTTP/1.1开始就支持了。一般断点下载时才用到Range和Content-Range实体头。HTTP协议本身不支持断点上传,需要自己实现。这些是协议方面的数据范围说明。但是对于程序员分块是要前后端一起设计一个文件分块上传的。例如要讨论分成多少块,每块的大小,每一块的标志,失败了标识上传到第几块了,断点传输从第几块开始等等。要经过文件分块和合并的问题。每一种语言都有自己的文件分块和合并的实现类,在java里面,文件FIle对象是Blob对象的子类,Blob对象包含一个重要的方法slice,通过这个方法,我们就可以对二进制文件进行拆分,还有块文件类chunkFIle。后端主要是考虑接受分块文件和合并文件
但是实际开发中都用到一些别人写好的包,例如百度的开源组件WebUploader,泽优软件的up6.
网上有博客说如果文件一旦大于1G只能用ftp协议(文件传输协议),不能再用上面说的http协议分块上传了。ftp和http的区别之一就是ftp协议支持更大的文件下载上传,并且ftp协议是双端协议。
webUploader断点上传的代码实例

springboot+vue.js分块上传大文件的实例参考

http和ftp区别参考

思路总结参考
参考文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值