前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大文件的上传和下载

大文件的上传和下载

作者头像
猿哥
发布2019-04-24 10:35:37
3.6K0
发布2019-04-24 10:35:37
举报
文章被收录于专栏:Web技术布道师Web技术布道师

文件小的时候,客户端和服务端之间的文件传输。很难感知出问题来。如果文件比较大了,不管是从服务器下载文件还是往服务器上传文件都是一个问题。这里插入一个分治思维、大文件的上传和下载能很好的体现该思维。如果一个问题比较难,我们可以不断的拆解成很多个子问题,不断拆开直到我们能解子问题。当我们把多个子问题解决完的时候,距离目标已经很近了。(拆分和聚合)

1、大文件不能直接读入内存 当文件比内存还大的时候,把大文件一次性读入内存。自己想想后果。开发语言都支持读取文件流的方式,一点点的读。

2、大文件的上传

client(APP、Web)->server 大文件大小为M,在client端需要做的就是把大文件拆分为多个小块,每个小块大小为N。拆分的个数为=ceil(M / N)。拆分的过程完全由客户端控制,比如客户端在读文件流的时候,是可以控制读到大小为N的时候生成一个子文件,并且命名。可以是边拆边上传小文件,也可以是拆完后并行上传小文件。最终把按照顺序排好的ceil(M / N)个小文件名字告知服务器。让服务器那边做合并重组。像7牛的文件上传SDK,具体没有看源码。思路应该是差不多的。

2-1、文件上传失败怎么办 看失败是哪方,一般是客户端重新上传,覆盖服务端的。客户端把小文件的MD5SUM值传上去。让服务端做文件完整性校验。如果上传的文件不完整,服务端可以在次像客户端索要重新上传。

3、大文件的下载

client(APP、Web)<-server HTTP1.1开始,支持header头中带上range,指明请求文件的大小。即可以实现客户端串行去下载多个小文件。最终做合并重组。这样就能实现快速的下载大文件、断点续传了。

3-1、服务端不支持断点续传怎么办 参照HTTP1.1开始的range,我们可以自己实现一个类型的协议出来。客户端和服务端都支持按照约定来走,从而实现断点续传。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PHP技术大全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档