`
STC89C52
  • 浏览: 5680 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

大文件分片并发上传初探

    博客分类:
  • JAVA
 
阅读更多

一、背景

系统中存在500M+的音频文件上传

基于客户端网络的不确定、不可控性,大文件分片并发上传、MD5秒传是有必要引入的

二、技术选型

Web Uploader



 



 

 

Spring Boot

redis

三、数据结构

服务端接收对象



 

 

redis数据结构

  • HASH
    • key:FILE_UPLOAD_STATUS
    • hashKey:68af75938175f1726afb1d9df90753fd
    • value:true
  • String
    • key:FILE_MD5:68af75938175f1726afb1d9df90753fd
    • value:D: /data0/uploads/68af75938175f1726afb1d9df90753fd/思考的乐趣.pdf 或者 D: /data0/uploads/68af75938175f1726afb1d9df90753fd/思考的乐趣.pdf.conf(记录各片段上传情况)

文件目录结构



 

 

四、实现细节

  • beforeSendFile:uploader.md5File(file)
    • 及时显示进度
    • 完成
      • index/checkFileMd5
        • stringRedisTemplate.opsForHash().get(Constants.FILE_UPLOAD_STATUS, md5);
          • null:该文件没有上传过。
          • true:文件已存在!
            • stringRedisTemplate.opsForValue().get(Constants.FILE_MD5_KEY + md5);返回给前端
          • false:该文件上传了一部分。
            • String value = stringRedisTemplate.opsForValue().get(Constants.FILE_MD5_KEY + md5);
            • byte[] completeList = FileUtils.readFileToByteArray(new File(value))
            • List<String> missChunkList <= completeList 返回给前端
        • file.missChunks = data.data;(部分已经上传到服务器了,但是差几个模块。)
  • beforeSend:依据missChunks决定是task.reject()还是task.resolve()
  • uploader.upload():index/fileUpload
    • 上传,依据偏移量写临时文件
    • 修改本片段上传状态完成,检查是否全部上传完毕
    • 全部上传完毕重命名文件

五、Q&A

  • 文件在JS中的数据结构以及如何分片?每片大小如何设置?
  • 并发上传是如何实现的?并发数如何设置?
  • 现有方案采用何种逻辑实现文件写磁盘?有优化空间吗?

六、参考资料

技术债

  • Java NIO的深入理解
  • JQuery deferred的深入理解
  • 文件服务器设计思路

业务

  • 大小: 549.9 KB
  • 大小: 101 KB
  • 大小: 38.8 KB
  • 大小: 11.5 KB
分享到:
评论

相关推荐

    基于Webuploader插件的大文件多文件分片并发md5上传

    **并发上传**:并发上传是指同时上传多个文件片或者多个文件,利用多线程或异步处理,充分利用网络带宽。Webuploader支持并发上传,可以设置并发上传的数量,这样可以在不增加服务器压力的情况下最大化上传效率。 *...

    大文件分片上传

    - **并发上传**:为了进一步提高效率,可以并行上传不同的分片,利用多线程或多进程技术。 - **断点续传**:如果上传中断,系统应能识别已上传的分片,从而在下次尝试时从断点处继续上传,避免重新上传所有分片。 ...

    springboot大文件分片上传

    springboot 大文件上传,支持分片并发上传、断点续传、秒传,已经测试过1.2G的文件,最大支持理论无限制 博文链接:https://blog.csdn.net/haohao123nana/article/details/54692669

    轻松实现超大文件分片上传.zip

    在IT行业中,大文件分片上传是一项常见的技术需求,尤其在云存储、文件分享和协作平台等场景下。本文将详细解析如何轻松实现超大文件的分片上传,并讨论相关的关键知识点。 首先,理解“分片上传”的概念是至关重要...

    springboot+vue实现超大文件分片极速上传与下载完整前后端源码

    3. **大文件分片上传**:为了处理大文件(如GB级别的文件),项目采用了分片上传策略。文件被分割成多个小块(通常几百KB或几MB),每个块单独上传,这样可以提高上传速度并降低网络问题的影响。同时,分片上传也...

    大文件分片上传,大视频等.zip

    这种方法可以提高上传速度,因为每个小片都可以并发上传,同时允许在网络不稳定时只重新上传失败的片,而不是整个文件。 HTML文件在这个过程中主要负责用户界面的设计和交互。用户通常会有一个提交按钮来启动上传...

    springboot大文件分片上传下载控制

    - 并行上传:前端可以并发上传不同的分片,提高上传速度。 - 断点续传:保存上传进度,如果上传中断,可以从上次断点继续,而不是重新开始。 - 负载均衡:对于高并发场景,可以考虑使用负载均衡策略,将不同分片...

    vue大文件上传的demo案例,可与fastdfs、Minio等文件系统实现分片上传

    在项目中,我们可以通过配置这个组件,设置每片的大小、并发上传的分片数量以及如何处理每个分片的上传状态。 在后端,我们可以集成fastdfs或Minio这样的文件存储系统。FastDFS是一个开源的、轻量级的分布式文件...

    java 大文件分片上传

    大文件分片上传的基本思路是将大文件分割成多个小块(通常称为“片”或“块”),然后逐个上传这些小块,最后在服务器端将这些块重新组合成原始文件。这个过程包括以下几个关键步骤: 1. **文件分片**:首先,我们...

    基于webuploader的asp.net大文件分片上传

    本项目"基于webuploader的asp.net大文件分片上传"实现了利用WebUploader与ASP.NET后台服务协同工作,通过将大文件切割为小块(通常称为“分片”或“块”),逐个上传到服务器,最后在服务器端进行重组,从而实现大...

    java实现大文件上传分片上传断点续传.zip

    本项目"java实现大文件上传分片上传断点续传.zip"提供了一个基于SpringBoot框架的解决方案,它实现了大文件的分片上传和断点续传功能。以下是关于这个项目的关键知识点的详细说明: 1. **大文件上传**: - 大文件...

    前端WebUploader后端Java大文件分片上传

    前端则可以通过调整并发上传的文件片数量,平衡网络带宽和服务器资源的占用。 7. **错误处理和异常恢复**:在设计系统时,应考虑到可能出现的各种错误情况,如网络波动、服务器故障等。确保有良好的错误处理机制,...

    php和Nodejs大文件分片上传

    这个技术通过将大文件分割成多个小块(分片)来上传,提高了上传的稳定性和效率。下面我们将详细讨论这个知识点。 **1. 文件分片上传原理** 文件分片上传的基本思想是将大文件切割成若干个小片段,每个片段独立...

    asp.net文件上传,支持断点,分片,并发

    分片上传可以提高上传速度,因为多块可以并发上传,还可以减少因单个大文件上传失败而造成的重试成本。在ASP.NET中,可以使用第三方库如jQuery.FileUpload或WebUploader等来实现这一功能。 3. **并发上传**:并发...

    WebUploader之前端大文件分片上传

    "WebUploader"是一个强大的前端文件上传组件,它巧妙地解决了这些问题,通过大文件分片上传和并发处理,使得上传过程更加高效和稳定。 首先,我们来详细了解一下**大文件分片上传**的概念。大文件分片上传是将一个...

    ASP.NET CORE使用WebUploader对大文件分片上传,并通过ASP.NET CORE SignalR实时反馈后台处.docx

    为了实现大文件分片上传,WebUploader 提供了并发分片功能,提高上传效率。在上传前,WebUploader 会对每个文件计算 MD5 值,用于检查文件的完整性。在后台,我们可以利用这些 MD5 值来判断文件是否已经存在于服务器...

    大文件进行分片处理,上传到百度云对象存储BOS,带进度条

    本示例主要讨论的是如何通过浏览器端对大文件进行分片处理,并利用百度云的对象存储服务BOS(Baidu Cloud Storage Object Storage)实现无服务器介入的直接上传,同时提供上传进度条功能。 首先,我们来详细了解...

Global site tag (gtag.js) - Google Analytics