大文件上传概述

浏览器的兼容性

为了考虑最大的兼容性,目前WebUpload同时实现了 HTML5 和 FLASH 两套运行时,在不支持 HTML5 的浏览器里面自动切换成 FLASH 方式上传,这样的好处是,既能在条件允许的情况保证 HTML5 发挥出其高效的优势,又能在不支持 HTML5 的浏览器里面保证能正常运行。

p.s. WebUploader是由Baidu FEX团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。

如何优化文件上传性能

上传前的优化

  • 通过减少文件体积,减少上传流量来优化。
  • 通过合并小文件,减少请求数来优化。

上传过程中优化

  1. 并发上传
    并发数越多,服务端压力越大,所以选择并发数不能太大!
    同时每个浏览器都有固定的最大并发数限制,所以选择并发数不能超出这个值。

  2. 分块上传
    分块上传,就是把一个大的文件分成若干块,一块一块的传输。

    优点:

  • 更强容错能力:如果传输中断,仅需重传出错的分片,而不需要重传整个文件,大大减少了重传开销。
  • 可以模拟暂停与继续:采用分块上传,在某个分块上传完了后不自动开始下个分块上传,利用此功能,就可以通过网络检测,在网络断开的时候自动暂停传输,网络恢复后,继续传输,给用户带来更好的体验效果。
  • 利用并发提速:如果单独的上传一个大文件,只有采用了分块上传才能利用并发请求来提速。
  • 更精准的速度跟踪:关于客户端监控上传进度,其实监控的都是客户端的发送速度,服务端有没有接收,有没有存储,是不知道的,只有在整个请求完毕,收到服务端反馈后才能确定数据已经成功接收。这样也就解释了进度显示的时候,长长出现,进度条瞬间到100%,要过一段时间才全部完成。如果采用分块上传,每个分块上传完成,可以确定这个分块服务端已经成功接收。
  1. 断点续传
    如果服务端能够把每个已成功上传的分块都记住,客户端可以快速验证,条件选择跳过某个分块,就实现了断点续传。

    优点:

  • 节省流量,避免上传重复的分块。
  • 减少用户等待时间。
  • 可恢复的上传。出现中断,就算浏览器刷新或者是换了台电脑也能恢复到上次中断的位置。
  1. 如何标识一个分块:
    怎样标识让服务端好入库,同时客户端可以快速的计算出来与服务端验证,换句话说就是,如何去找出分块的唯一ID。
    每次分块上传前,根据内容 MD5序列化,得到一个唯一ID,与服务端验证,如果此分块已经存在于服务端,则直接跳过此分块上传,否则上传此分块,成功后,服务端记下此分块ID。

参考网站 http://www.zuidaima.com/blog/2819949848316928.html