fileex
介绍
针对大文件的分块传输和断点续传设计实现的处理器(支持上传和下载),同时具备上传/下载进度和上传/下载速度的推送功能。
本项目的前端项目和客户端项目并不是单独部署到一台服务器的,是在本机启动,因为使用前端页面与服务端实现大文件传输协议对于我来说有点困难...
而且对编写java桌面客户端没有实战过。所以前端项目和客户端项目在本机启动,读取本机系统的文件,并提供页面操作
软件架构
frontend-service 简单实现的前端页面(依赖netty-client)
netty-client netty客户端 (依赖netty-common)
netty-common netty客户端服务端公共项目
netty-server netty服务端 (依赖netty-common)
mongodb 提供数据服务(上传任务、下载任务、已上传完的文件数据)
技术实现
分块传输使用HTTP1.1协议的transfer-encoding:chunked,netty客户端和服务端上添加
pipeline.addLast("chunkedWriter", new ChunkedWriteHandler());
断点续传主要使用了RandomAccessFile类来实现,不过该类是大量磁盘IO操作,所以效率不太高。
客户端首次上传文件时,不会使用RandomAccessFile进行分割,若此时停止上传再继续上传,客户端会首先请求服务端获取当前文件上传多少长度,客
户端得到该长度会使用RandomAccessFile进行分割文件得到新的文件再次调用上传接口进行上传。
下载同样道理,只是是由客户端得到当前文件已下