网站首页 > 精选教程 正文
介绍
针对大文件的分块传输和断点续传设计实现的处理器(支持上传和下载),同时具备上传/下载进度和上传/下载速度的推送功能。 本项目的前端项目和客户端项目并不是单独部署到一台服务器的,是在本机启动,因为使用前端页面与服务端实现大文件传输协议对于我来说有点困难... 而且对编写java桌面客户端没有实战过。所以前端项目和客户端项目在本机启动,读取本机系统的文件,并提供页面操作
github:https://gitee.com/gaojunjie03/fileex
软件架构
- 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进行分割文件得到新的文件再次调用上传接口进行上传。 下载同样道理,只是是由客户端得到当前文件已下载的长度推给服务端,服务端拿到长度进行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
安装教程
- 前端客户端连接服务端的配置类在netty-client/src/main/java/com/netty/Constants.java中 SERVER_IP 为netty-server所在服务器ip,WEBSOCKET_PORT为netty-server的websocket端口
- 本机启动前端客户端frontend-service,一个springboot服务
- 服务器安装mongodb
- netty-server的配置类在netty-client/src/main/java/com/netty/Constants.java 注意WEBSOCKET_IP只能填写0.0.0.0
- 服务器部署netty-server服务 启动命令java -jar xxxx.jar即可
猜你喜欢
- 2024-11-23 如何将本地文件提交到GitHub仓库?
- 2024-11-23 再见FTP/SFTP!是时候拥抱下一代文件传输利器Croc了
- 2024-11-23 「Java」使用WatchService监听文件变化
- 2024-11-23 springboot上传文件出错IOException: The temporary upload location
- 2024-11-23 Java,通过文件获取MimeType的方式,文件扩展名获取ContentType
- 2024-11-23 将20M文件从30秒压缩到1秒,我是如何做到的?
- 2024-11-23 拥抱文件传输利器 Croc
- 2024-11-23 完整教程:使用Spring Boot实现大文件断点续传及文件校验
- 2024-11-23 什么是JVM和字节码.class文件?它们的关联又是什么?
- 2024-11-23 java中oss分片上传(包含业务和详细讲解)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)