针对大文件的分块传输和断点续传设计实现的处理器(支持上传和下载),同时具备上传/下载进度和上传/下载速度的推送功能。 本项目的前端项目和客户端项目并不是单独部署到一台服务器的,是在本机启动,因为使用前端页面与服务端实现大文件传输协议对于我来说有点困难... 而且对编写java桌面客户端没有实战过。所以前端项目和客户端项目在本机启动,读取本机系统的文件,并提供页面操作
pipeline.addLast("chunkedWriter", new ChunkedWriteHandler());
断点续传主要使用了RandomAccessFile类来实现,不过该类是大量磁盘IO操作,所以效率不太高。
客户端首次上传文件时,不会使用RandomAccessFile进行分割,若此时停止上传再继续上传,客户端会首先请求服务端获取当前文件上传多少长度,客
户端得到该长度会使用RandomAccessFile进行分割文件得到新的文件再次调用上传接口进行上传。
下载同样道理,只是是由客户端得到当前文件已下载的长度推给服务端,服务端拿到长度进行RandomAccessFile分割文件在推给客户端.
netty-server 由于没有springboot的mvc功能,在编写接口上有一定的麻烦程度,所以这里简单手写实现了mvc的功能
由于直接默认使用netty的文件上传,是可以支持分块传输,但是不支持断点续传。所以这里改写了一下netty在接收文件写入文件时的部分代码 详细见netty-server/src/main/java/com/netty/my/MyAbstractDiskHttpData.java,netty-server/src/main/java/com/netty/my/MyDefaultHttpDataFactory.java,netty-server/src/main/java/com/netty/my/MyDiskFileUpload.java
浏览器进入前端页面http://localhost:8789/frontend/file
左上角的圆角加号可以创建根目录
每个目录右边的加号可以创建该目录的子目录
点击目录,可以显示该目录下已经上传成功的文件
点击文件上传按钮,弹窗显示本机系统的目录和文件架构
选中某个文件,点击下方确定按钮即可对该文件进行分块传输
同时支持多文件上传(当然了这是要看服务器和本机性能配置是否给力...)
上传中心支持断点续传,即点击暂停,暂停后可点击继续或取消上传
文件上传成功后会刷新文件列表
文件列表的每个文件的下载按钮会弹出选择要下载到本机指定目录
选中目录后 点击下方确定按钮,即可进入下载中心进行文件的下载
下载中心跟上传中心一样 支持断点续传
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。