面试必备,文件上传总结

什么是文件上传?
   文件上传是一个老生常谈的话题了,在文件上传的收 , 服务器会先做MD5校验 如果服务器上有一样东西 它就是直接给你个新地址 其实你下载的都是服务器上同一个文件 想要不妙传 其实只要让MD5改变 就是文件本身修改一下 例如一个文本文件 你多加几个自 MD5就变了  就不会秒传了

文本实现的秒传核心逻辑?
a.利用redis的set方法存放文件上传的状态 其中key为文件上传的md5 value为是否上传完成的标志位
b. 当标志位为true 为上传已经完成 此时如果有相同的文件上传 则进入秒传逻辑 如果标志位为false,则说明还没有上传完成,此时需要在调用set方法  保存快文件记录的路径 其中的key为上传文件md5加一个固定前缀 vlaue为块号文件记录路径

分片上传?
分片上传 就是将所要上传的文件 按照一定的大小 将整个文件分割成多个数据块  (我们称职Part) 来进行分别上传 上传之后再由服务端对所有上传的文件进行汇总整合成原始的文件

分片上传的使用场景
大文件上传
网路环境不太好 存在需要重传的风险的场景

什么是断点续传 ?
断点续传是在下载时 , 将下载或上传任务 (一个文件或一个压缩)人为的划分为几个部分 每一个部分采用一个线程进行上传或下载 如果触碰到网路故障 可以从已经上传或下载的部分开始继续上传或者下载未完成的部分 而没有必要从头开始上传或下载 本文的断点续传主要是针对断点上传场景。

应用场景
断点续传可以看成是分片上传的一个衍生,因此可以使用分片上传的场景,都可以使用断点续传。

实现断点续传的核心逻辑
在分片上传的过程中,如果因为系统崩溃或者网络中断等异常因素导致上传中断,这时候客户端需要记录上传的进度。在之后支持再次上传时,可以继续从上次上传中断的地方进行继续上传。

为了避免客户端在上传之后的进度数据被删除而导致重新开始从头上传的问题,服务端也可以提供相应的接口便于客户端对已经上传的分片数据进行查询,从而使客户端知道已经上传的分片数据,从而从下一个分片数据开始继续上传。


a、方案一,常规步骤

将需要上传的文件按照一定的分割规则,分割成相同大小的数据块;

初始化一个分片上传任务,返回本次分片上传唯一标识;

按照一定的策略(串行或并行)发送各个分片数据块;

发送完成后,服务端根据判断数据上传是否完整,如果完整,则进行数据块合成得到原始文件。

b、方案二、本文实现的步骤

前端(客户端)需要根据固定大小对文件进行分片,请求后端(服务端)时要带上分片序号和大小

服务端创建conf文件用来记录分块位置,conf文件长度为总分片数,每上传一个分块即向conf文件中写入一个127,那么没上传的位置就是默认的0,已上传的就是Byte.MAX_VALUE 127(这步是实现断点续传和秒传的核心步骤)

服务器按照请求数据中给的分片序号和每片分块大小(分片大小是固定且一样的)算出开始位置,与读取到的文件片段数据,写入文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值