为了账号安全,请及时绑定邮箱和手机立即绑定
首页 手记 【九月打卡】第18天 断点续传(上)

【九月打卡】第18天 断点续传(上)

2022.09.22 23:09 33浏览

一、课程介绍

【课程名称】SpringBoot 2.x 实战仿B站高性能后端项目。
【章节】第四章 4.6 断点续传(上)
【讲师】HELLOSTAR

二、课程内容

1.断点续传介绍

fastdfs支持断点续传需要客户进行切片上传,并且切片字节大小小于等于storage配置的buff_size,默认是256k。
当fastdfs storage接收客户端上传数据时,如果出现超时的情况会对文件offset和接收时记录的start、end进行比较,当offset>start 并且 offset < end时即写入文件的数据是应接收的一部分数据时,会truncate。所以当切片大小小于buff_size时,每次写入时如果发生异常,因未达到buff_size,所以服务端还未写入文件,不会产生truncate问题。注意发生异常,下次传输时,需根据fileid获取服务端的文件大小,然后对文件流进行skip之后,继续上传即可。

2.FastDFSd的支持断点续传的服务接口

/**
 * 支持断点续传的文件服务接口
 * <p>
 * <pre>
 * 适合处理大文件,分段传输
 * </pre>
 *
 * @author tobato
 */
public interface AppendFileStorageClient extends GenerateStorageClient{
    /**
     * 上传支持断点续传的文件
     */
    StorePath uploadAppenderFile(String groupName, InputStream inputStream, long fileSize, String fileExtName);
    /**
     * 断点续传文件
     */
    void appendFile(String groupName, String path, InputStream inputStream, long fileSize);
    /**
     * 修改续传文件的内容
     */
    void modifyFile(String groupName, String path, InputStream inputStream, long fileSize, long fileOffset);
    /**
     * 清除续传类型文件的内容
     */
    void truncateFile(String groupName, String path, long truncatedFileSize);
    /**
     * 清除续传类型文件的内容
     */
    void truncateFile(String groupName, String path);
}

支持文件断点续传的功能,上传之后返回文件存储路径

//上传可以断点续传的文件
    public String uploadAppenderFile(MultipartFile file) throws Exception{
        String fileType = this.getFileType(file);
        StorePath storePath = appendFileStorageClient.uploadAppenderFile(DEFAULT_GROUP, file.getInputStream(), file.getSize(), fileType);
        return storePath.getPath();
    }

修改续传文件的内容。offset为修改文件的起始位置。

public void modifyAppenderFile(MultipartFile file, String filePath, long offset) throws Exception{
        appendFileStorageClient.modifyFile(DEFAULT_GROUP, filePath, file.getInputStream(), file.getSize(), offset);
    }

三、课程收获

了解大文件【断点续传】的实现原理:对文件进行分片,逐片进行上传,中间发生停止的话,记录片的位置,重新上传时从中断的片位置继续上传。
了解【秒传】的实现原理:对每个文件进行MD5加密,每个文件在系统中只存储一份。如果第二次上传的话,根据MD5的密钥自动提示已上传或上传完成,达到秒传的效果。

四、学习过程

编码过程截图

点击查看更多内容
0人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
学生
手记
粉丝
1
获赞与收藏
2

关注TA,一起探索更多经验知识

同主题相似文章浏览排行榜

风间影月说签约讲师

50篇手记,涉及Java、MySQL、Redis、Spring等方向

进入讨论

Tony Bai 说签约讲师

146篇手记,涉及Go、C、Java、Python等方向

进入讨论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消