前段时间做视频上传业务,通过网页上传视频到服务器。
视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制;2,请求时间过长,请求超时;3,传输中断,必须重新上传导致前功尽弃;
解决方案:
1,修改服务端上传的限制配置;Nginx 以及 PHP 的上传文件限制 不宜过大,一般5M 左右为好;
2,大文件分片,一片一片的传到服务端,再由服务端合并。这么做的好处在于一旦上传失败只是损失一个分片而已,不用整个文件重传,而且每个分片的大小可以控制在4MB以内,服务端限制在4M即可。
关键部分
- 前端用file.slice()分块
- 前端用FileReader获取每一分块的md5值
- 前端上传每一分块前,都会去服务器校验分片是否已上传,以此来支持断点续传
- 后端用MultipartFile接受分块文件
- 后端用FileOutputStream拼装分块文件
-
- 500M以下的用http协议传输(网上一搜大把的)
- 500M以上1G以下的用http协议分块或者ftp协议传输
- 1G以上的只能用ftp协议传输