如何让你的大文件上传变得又稳又快?
随着网络环境的大幅改善及网络资费的显著降低,人们在网络上的互动不再局限于传统的文本内容,图片、语音、视频等纷纷加入了互动行列。
相较于文本内容而言,多媒体在易用性和情感表达上更有优势,当然相对文本,体积也大了很多。比如一条文本消息只有不到 100 字节,但一条视频消息可能超过 100 MB。这就导致多媒体在网络传输、实时触达等方面相对文本内容会更难一些。
在网站或者程序中,除了用户交流的图片、视频等互动消息,还有其他形式的大文件也越来越多。保证大文件的上传稳定是一个需要长期投入和突破的重点。今天,我们就来看看都有哪些手段可以保证用户拥有一个良好的上传体验。
如何让资源传递又快又稳
或许大家会注意到,使用 QQ 时,朋友发送给你的图片和视频会加载一段时间才会显示,这是因为程序并不是发送文件给你,而是发送了文件路径,当我们访问路径后才会加载文件。这是当前主流的大文件通讯方式,即:
上传文件到文件服务器
推送文件路径
收到文件路径
加载文件
这么做是因为大文件的传输耗时过长,会影响消息的即时性,所以不会直接传送文件。
那么,我们如果要想让图片、视频、语音等多媒体消息发送得又快又稳,就可以从“上传多媒体文件到文件服务器”这一步上着手。
上传接入点
第一种优化上传文件的手段是优化上传接入点。
上传请求到文件服务器,服务器响应建联,上传端再继续传递数据,直至上传完成。这个过程的耗时越短就会让人感觉网速越快。
然而我们国家目前的固网宽带运营商构成复杂,跨运营商网络访问的高延迟和不稳定性一直是个比较棘手的难题。对于传输数据更多的视频、图片等多媒体文件来说,跨运营商来上传文件,多次 RTT(Round-Trip-Time,往返时延)的体验则会更差。
目前针对这种网络情况的主流做法是,对不同的网络运营商提供不同的上传接入点 IP,然后通过运营商 DNS 解析,让用户能通过本运营商的上传接入点来快速上传文件。同时后端的图片上传存储服务后会部署在多线机房,方便快速地把文件流提交给存储层,从而避免从接入点到存储服务的跨网开销,并解决其他运营商的用户下载图片时需要跨网的问题。
不过,虽然多个运营商接入点 IP 能解决跨运营商网络访问的问题,但是在管理和使用上会比较复杂。因此大部分服务提供商会利用多线 BGP(Border Gateway Protocol,边界网关协议)机房托管,这样就可以只提供 IP ,让访问用户自主选择最佳路由。
分块上传
除去上传接入点的优化,分块上传也可以提升多媒体文件的上传性能和成功率。
分块上传,是指在上传客户端,把需要上传的文件按照一定规则切分为多个数据块,并按照规则标记序号,然后再分别上传这些数据块,服务端接收到后,按照序号重新将多个数据块组装成完整的文件。
对于图片、视频这种较大的文件来说,分块上传可以让客户端在分块完成后,使用并发的方式充分利用网络带宽同时上传多个分块,有效提升了上传效率。此外,在一些网络环境较差、信号不稳定的场景下,采用分块的方式,在上传失败后进行重试时,只需要重传某一个失败的分块,不必重新上传整个文件,显著提升了重新发送的成功率。
在分块上传中,分块大小也是一个重要的问题。如果分块太大,片数少,上传的并发度不够,可能会降低上传效率,而且每个大的分块在失败后重传的成本会比较高。但是如果分块太小,片数多,并发需要的连接数又太多,多条连接会降低网络的整体吞吐,客户上传端和服务接收端拆分与合并分块的开销也相应增加,而且传输时的额外流量也会更多。
所以,不同网络环境下如何选择一个合适的分块大小至关重要。一般来说,在网络状况较好的环境,比如在 WiFi、4G 下,相应的分块大小应该设置得更大一些;而在 2G、3G 弱网情况下,分块可以适当设置小一点。
断点续传
因为大文件的上传耗时较长,如果用户由于网络断开、设备重启等原因,需要在上传未完成时暂停上传任务。当然,用户肯定不会希望下次上传是从头开始。因此如何从暂停位置开始上传的功能就变得必要起来。这就是我们常说的“断点续传”
断点续传是通过给每一次上传行为分配一个唯一的任务标识,每个分块在上传时除了携带自己的序号外,还需要带上这个任务标识,服务端针对接收到的同一个任务标识的分块进行暂存,即使由于某个原因暂停上传了,这些暂存的分块也不会马上清理掉,而是保留一定的时间。
当上传端需要继续上传时,在请求的同时会继续携带之前的任务标识。客户端接收到后会检查服务端已有分块的情况,如果没有过期就继续从上次断开的分块位置进行上传,反之则会重新上传。
断点续传功能在上传大文件时,可解决传输较大文件过程中因网络错误而必须重头再来的痛点,对于提升用户上传体验是很明显的。
如何快速拥有这些上传优势
如果想要完成上述大文件上传优化,需要考虑到架构、设计、运维等方面,不仅优化成本高,改造时间相对也长。想要拥有上面所说的这些优势,选择又拍云存储就可以了。
又拍云存储可以让大型文件通过 CDN 就近完成上传、上传加速传输、分块上传和断点续传,同时还可以使用图片处理、视频处理、文件压缩解压缩对文件进行处理。在文件访问的时候,也会通过 CDN 使用大文件分段缓存、视频拖拉、链路优化等功能进行全网分发。保证企业海量数据的传输、处理、存储、分发与容灾需求。
如何让你的大文件上传变得又稳又快?相关推荐
- 大文件上传服务器:支持超大文件HTTP断点续传的实现办法
点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 来源:blog.csdn.net/ababab12345/a ...
- nodejs文件服务器断点续传,基于Nodejs的大文件上传之断点续传
接着<扒一扒Nodejs formidable的onPart>和<也说文件上传之兼容IE789的进度条---丢掉flash>:前面已完成兼容IE789的大文件上传:无flash ...
- Asp.net2.0下的大文件上传服务器控件
最近本来准备在Alisoft上做点东西玩,做的过程中,涉及到了文件上传.刚开始,准备在网上找几个用,发现国外好用的要钱,而国内的,开源的又不好用,所以决定自己也写一个,顺便以后赚点外快.我看了一下,这 ...
- JAVA大文件上传断点续传解决方案
JAVA大文件上传断点续传解决方案 参考文章: (1)JAVA大文件上传断点续传解决方案 (2)https://www.cnblogs.com/songsu/p/11834425.html (3)ht ...
- asp.net实现ftp上传代码(解决大文件上传问题)
asp.net实现ftp上传代码(解决大文件上传问题) 参考文章: (1)asp.net实现ftp上传代码(解决大文件上传问题) (2)https://www.cnblogs.com/LYunF/ar ...
- jquery PHP大文件上传,Jquery和BigFileUpload实现大文件上传及进度条显示
实现方法:用到了高山来客 的bigfileupload组件,用高山来客的方法,弹出一个模式窗口,然后不停刷新获取进度,始终觉得体验感不好,于是想到用jquery来实现无刷新进度显示,因为提交页面后, ...
- 按一行一行的方法将一个文本文件复制到另一个文件中_大文件上的结构化数据计算示例...
[摘要] 本文分析大文件计算的实现原理,如过滤.聚合计算.添加计算列.排序.分组聚合.topN 等,以及利用并行计算来提高计算速度,并用 esProc SPL 举例说明如何用简洁的脚本实现大文件计算. ...
- 解决PHP大文件上传问题
PHP大文件上传问题 今天负责创业计划大赛的老师问我作品上报系统上传不了大文件,我当时纳闷了,做的时候没限制上传文件的大小阿,怎么会传不了呢,自己亲自体验了番,果然不 行,想了好一会儿才有点眉目 ...
- Silverlight多文件(大文件)上传的开源项目
在Silverlight上实现文件上传的例子在网上的还不多,特别是多文件上传和大文件上传的例子就更少了.当然 那些商品软件公司的产品除外. 目前的CodePlex上就有这样一个项目,其链接:http: ...
最新文章
- Python爬一下抖音上小姐姐的视频~
- Linux 系统修复
- 如果ASM磁盘组由哪些物理磁盘组成?
- Java入门教程五(数字和日期处理)
- apache 创建多端口监听
- linux下常用的关机命令有:shutdown、halt、poweroff、init;重启命令有:reboot。下面本文就主要介绍一些常用的关机命令以及各种关机命令之间的区别和具体用法。
- php http 类,php写的http请求封装类
- python progressbar 倒计时_Python使用progressbar模块实现的显示进度条功能
- C语言中的宏之#define
- 【教程】CoreAVC+Haali安装及设置简易教程(KMPlayer)(4)
- 关于冯乐乐《Shader入门精要 》书中基础纹理一章的一些笔记
- MySQL中round函数
- 腾讯Docker云平台GaiaStack
- 程序员常用笔记与思维导图工具
- git+github+jenkins自动发布
- vue移动端监听切屏次数
- 你离年薪50w的架构师还差多远
- 美漂数据科学家年薪多少?爬了6年H1B签证数据发现,招的人多了,但钱少了
- 计算机考研怎么给老师发邮件,考研复试前,手把手教你怎么给导师发邮件!4点要注意...
- 美国政府否认“口头批准”超级高铁,然而马斯克没有任何损失