使用Netty作为底层框架,开发文件上传系统。SpringBoot+Netty+SpringTask。搭建过程2

Netty学习(十)-Netty文件上传 今天我们来完成一个使用netty进行文件传输的任务。在实际项目中,文件传输通常采用FTP或者HTTP附件的方式。事实上通过TCP Socket+File的方式进行文件传输也有一定的应用场景,尽管不是主流,但是掌握这种文件传输方式还是比较重要的,特别是针对两个跨主机的JVM进程之间进行持久化数据的相互交换。而使用netty来进行文件传输也是利用netty天然的优势:零拷贝功能。很多同学都听说过nett 阅读详情

1、文件上传时请求的消息类型

@Data
public class FilePacketRequestMessage extends Message{

//文件名称
    private String file_md5;
//字节读取开始位置
    private long startPos;
    private byte[] bytes;
//字节读取结束位置
    private int endPos;
//本次发送总字节数
    private long totalLen;
//上传文件的路径,防止文件过大多次上传
    private String filePath;

    public FilePacketRequestMessage() {
    }

    @Override
    public int getMessageType() {
        return UploadOABak;
    }
}

2、将读取到的最新备份封装到消息类型中并发送给服务端

@Slf4j
public class SendFile {

    private static RandomAccessFile randomAccessFile = null;

    public static void sendFileByByte(Channel channel, File file,long start) throws IOException {
        String filename = file.getName();
        String bakPath = file.getPath();
        randomAccessFile = new RandomAccessFile(bakPath,"r");
        byte[] bytes = new byte[1024];
        int byteRead = 0;

        FilePacketRequestMessage fileRequest = new FilePacketRequestMessage();
        fileRequest.setFile_md5(filename);
        fileRequest.setStartPos(start);
        randomAccessFile.seek(fileRequest.getStartPos());
        long totalLen = bakPath.length();
        long end = totalLen - start;
        log.info("传输文件第 {} 字节,共有{} 字节,还剩余{}未上传", start,totalLen,end);
        fileRequest.setTotalLen(totalLen);
        if ((byteRead = randomAccessFile.read(bytes))!= -1 && (randomAccessFile.length()-start)>0){
            fileRequest.setEndPos(byteRead);
            fileRequest.setBytes(bytes);
            fileRequest.setFilePath(bakPath);
            channel.writeAndFlush(fileRequest);
            randomAccessFile.close();
        }else{
            randomAccessFile.close();
            channel.close();
            System.out.println("文件读取完成");
        }
    }

3、如果备份过大可能要拆分成多块进行上传

创建文件上传响应类型,监控已经上传完成度进度

并通过已经完成的进度作为开始再读取1024个字节作为下次要发送的数据

@Data
public class FileUploadResultResponseMessage extends AbstractResponseMessage{

    private Long start;

    private String filePath;

    public FileUploadResultResponseMessage(Long start, String filePath) {
        this.start = start;
        this.filePath = filePath;
    }

    public FileUploadResultResponseMessage(boolean success, String reason, Long start, String filePath) {
        super(success, reason);
        this.start = start;
        this.filePath = filePath;
    }

    @Override
    public int getMessageType() {
        return UploadResult;
    }
}

4、读取服务端响应的消息,以上次结束的位置作为本次读取数据的开始进行上传。

@Slf4j
@Component
@ChannelHandler.Sharable
public class TransferFileHandler extends SimpleChannelInboundHandler<FileUploadResultResponseMessage> {


    @Override
    protected void channelRead0(ChannelHandlerContext ctx, FileUploadResultResponseMessage in) throws Exception {
        if (!in.getSuccess()) {
            String filePath = in.getFilePath();
            Long start = in.getStart();
            File file = new File(filePath);
            SendFile.sendFileByByte(ctx.channel(), file, start);
        }
    }
}

5、配置自动任务,定时定点调用文件上传的方法。

    为防止网络异常应使用心跳机制实时感应客户端或服务端是否在线。

@Component
public class XXLJobTask {

    @Value("${netty.uploadDir}")
    private String uploadDir;

    @Scheduled(initialDelay = 12000,fixedDelay = 1000*3600)
    public void uploadFileTask(){

        Channel channel = NettyClient.getChannel();
        File bakPath = selectFileToUpload(Paths.get(uploadDir));
        try {
            SendFile.sendFileByByte(channel,bakPath,0);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

Netty4实现高效文件分片上传方案 Netty是一个高性能的网络应用框架,由JBOSS提供的开源项目。在微服务和高并发的互联网应用场景中,Netty以其卓越的性能和稳定性,被广泛应用于各种通信协议的实现中,如HTTP,WebSocket,MQTT等。它的主要目的是提供一种快速、简单的方法,使得开发者能够快速地构建可维护的高性能网络服务器和客户端。Netty的核心价值在于其异步事件驱动的网络应用框架,它极大地简化了网络编程,使得开发者可以专注于业务逻辑而不是复杂的网络协议。 阅读详情

相关推荐

《基于Yolo算法的火灾检测系统设计与实现》开题报告

在消防安全领域,火灾对生命财产安全构成严重威胁。传统的火灾检测手段存在诸多不足,如误报率高、检测范围有限、响应速度慢等。基于 Yolo 算法的火灾检测系统能够利用深度学习技术,实现对火灾的高效、精准检测,具有重要的现实意义。         从社会安全角度看,该系统可以广泛应用于各类公共场所、工业厂房和居民住宅,实时监测火灾隐患,及时发出警报,为人员疏散和消防救援争取宝贵时间,有效降低火灾造成的人员伤亡和财产损失,保障社会公共安全。

m0_69704149的博客 1384

Netty学习之路一(大文件传输案例分析)

业务场景: 由于工作需要,需要在两台服务器的java服务之间通过netty建立链接,将大文件(几百G到TB级别)从机器A上的serverA发送到机器B上的serverB。 实现方法设计: 系统现有的实现方法:将业务方存储在服务器上的文件,在传输之前,对文件进行分片,以定义的规则将文件分为大小20MB的分片存储在服务器中。同步时以异步的方式同步分片,当然A服务器上的文件同步到B服务器时也是以分片的...

zhangsuhua0702的博客 1万+

[多智能体强化学习] 王树森YouTube课程笔记

前言 近期在设计V2X资源分配任务下的状态空间和动作空间,可以说是一筹莫展,是自己菜,现在看来可能也是涉及到一些关于多智能体强化学习实现过程中过于细节的点,目前的知识储备还不够。因此打算用半周到一周的时间重电,希望之后能有进展。 本文内容来自于友人LX所推荐的油管教程,链接如下:多智能体强化学习,一共两节课40min左右。教程废话不多干货不少,老师的声音还好听,推荐直接去看原教程。 这里还要多一嘴,那就是对于强化学习来说,单主体和多主体的界限,在某种程度上来说是很模糊的,并不是场景中有多个主体需要..

观林望实的博客 3365

【十 二】Netty 文件传输

本章 继续学习了Netty 的文件传输功能。包括文件的路径等介绍。 后面的功能实现,很好的 一点带面 让我们逐步的认识Netty。通过实现这个功能,能增加我们的信心。对Netty 更加感兴趣

echohuangshihuxue的博客 3390

hspice2016安装教程

试装系统:win10 64bit 安装包路径和安装路径最好都不要出现中文,一般选择默认安装在C盘。 1.解压安装包压缩文件。 2.以管理员身份运行hspice_vL-2016.03-2_win.exe。 3.点击“Next”。 4.选择“I accept”,然后点击“Next”。 5.点击“Next”。 6.一般默认安装路径即可,然后点击“Next”。 7.点击“Next”. 8.点击“Next”。 9.正...

谢谢关注“小鱼教你模数电”,各平台同号 1万+

多组学联合高级Mantel-test热图

对应的是「metabo」中物质间的相关性热图,单元格色块颜色表示相关系数大小,橙色表示+相关,绿色表示-相关;单元格内的数值表示相关性值大小,星号表示显著性。双组学(微生物组/ 转录组/代谢组等两两组合)关联分析,可视化组学特征间的关联显著性、强度及相关方向。表示<trans>与<metabo>中物质的Mantel test结果。表示整体相关的系数,连线颜色表示相关系数的显著性检验结果。宿主-微生物互作、疾病多组学机制、环境-生物多组学关联。为物质名称,不允许存在空值、重复值。

多组・学・多组学 370

用Netty搭建文件上传系统

客户端向服务端发送一个文件(可以是视频、音频、文本、表格等格式的文件),服务端接收文件并保存到指定的目录下。 服务端保存好文件之后向客户端发送回应:xxx文件收到了。

前者已逝,后者未至。 2136

openclaw update时出现Skipped:this OpenClaw install isn‘t a git checkout,and the package manager解决方案

本文主要介绍了openclaw update时出现openclaw update时出现Skipped:this OpenClaw install isn’t a git checkout,and the package manager解决方案,希望能对使用openclaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 12万+

使用Netty进行文件传输

一、简介 使用Netty进行文件传输主要涉及到FileChannel文件通道,它用来连接文件,可以通过这个通道读写文件。在使用FileChannel之前必须先打开它,FileChannel无法直接打开,可以通过InputStream、OutputStream或RandomAccessFile来获取FileChannel实例,比如: RandomAccessFile file=new Rand...

Terisadeng的博客 2万+

【Unity3D框架】GameFramework框架完全教程《全网最全》-专栏文章目录

最近准备学习框架,了解到GameFramework框架是国产Unity3D框架,准备学习一下,但是奈何全网关于这个框架的教程实在太少。为了让自己学习方便一些,也为了让后来者乘凉。将框架以自己的理解整理目录,并且补全教程。觉得教程有帮助别忘了一键三连哦。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 2万+

使用MATLAB求解二维顶盖驱动流问题的详细代码和说明

本文介绍了使用MATLAB求解二维顶盖驱动流问题的涡量-流函数方法。代码采用129×129网格,雷诺数Re=1000,通过迭代求解Navier-Stokes方程,包含流函数方程和涡量输运方程的离散求解。程序实现了边界条件处理、收敛性检查,并提供丰富后处理功能:流线图、涡量分布图、中心线速度曲线、矢量图和三维涡量可视化。计算结果可与Ghia等(1982)的经典数据进行验证。该代码完整展示了CFD问题的数值求解流程,包括参数设置、主循环计算和多种结果呈现方式,适用于流体力学教学和科研验证。

AI的内部世界的博客 227

使用Netty作为底层框架,作为文件上传系统。SpringBoot+Netty+SpringTask

如何使用Netty、SpringBoot将文件在客户端与服务端中进行传输,如何保证文件的完整性,如果出现错误应该如何补救。

goPlayJava的博客 697

Anomalib库安装以及使用

Anomalib是一个专注于异常检测的深度学习库。它的目标是收集最新的异常检测算法,并提供用于在公共和私有数据集上进行基准测试的工具。该库提供了一系列已实现的异常检测算法,这些算法在最近的文献中有所描述。此外,Anomalib还提供了一套工具,方便开发人员开发和实现自定义模型。该库特别注重基于图像的异常检测,旨在识别数据集中的异常图像或图像中的异常像素区域。通过使用Anomalib,用户可以快速构建和评估各种异常检测算法,以满足其特定需求。

mingo_敏 5201

【SpringBoot2】开发实用篇-整合第三方技术(任务、邮件)_springboot定时任务第三方框架

小编精心为大家准备了一手资料以上Java高级架构资料、源码、笔记、视频。Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术【附】架构书籍BAT面试的20道高频数据库问题解析Java面试宝典Netty实战算法BATJ面试要点及Java架构师进阶资料本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取@Override。

2401_84584682的博客 386

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Netty 实现文件上传

今天我们来完成一个使用netty进行文件传输的任务。在实际项目中,文件传输通常采用FTP或者HTTP附件的方式。事实上通过TCP Socket+File的方式进行文件传输也有一定的应用场景,尽管不是主流,但是掌握这种文件传输方式还是比较重要的,特别是针对两个跨主机的JVM进程之间进行持久化数据的相互交换。 而使用netty来进行文件传输也是利用netty天然的优势:零拷贝功能。很多同学都听说过netty的”零拷贝”功能,但是具体体现在哪里又不知道,下面我们就简要介绍下: Netty的“零拷贝”主要体现在

Tom_sensen的博客 3294

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Netty学习(十)-Netty文件上传(1)

Netty作为高性能的服务器端异步IO框架必然也离不开文件读写功能,我们可以使用netty模拟http的形式通过网页上传文件写入服务器,当然要使用http的形式那你也用不着netty!但是在netty5 中已经为我们写好了,我们可以直接调用netty5的API就可以实现。Netty提供了组合Buffer对象,可以聚合多个ByteBuffer对象,用户可以像操作一个Buffer那样方便的对组合Buffer进行操作,避免了传统通过内存拷贝的方式将几个小Buffer合并成一个大的Buffer。

m0_60666841的博客 703

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

netty系列之:搭建HTTP上传文件服务器

上一篇的文章中,我们讲到了如何从HTTP服务器中下载文件,和搭建下载文件服务器应该注意的问题,使用的GET方法。本文将会讨论一下常用的向服务器提交数据的POST方法和如何向服务器上传文件。

程序那些事 1万+

开源代码分享:SpringBoot实现的大文件上传下载解决方案。

本方案通过自定义WebSocket+分片传输机制,结合SM4国密算法,解决了WebUploader在政府项目中的局限性。方案充分考虑了国产化环境要求、浏览器兼容性和大文件传输稳定性,同时提供了完整的前后端实现示例。下一步将进入详细设计和开发阶段,确保按时交付符合要求的解决方案。支持离线保存文件进度,在关闭浏览器,刷新浏览器后进行不丢失,仍然能够继续上传。

weixin_52050572的博客 1000

Netty学习(十)-Netty文件上传,带你彻底搞懂Linux运维启动速度优化

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

2401_83621499的博客 858

netty之Netty传输文件、分片发送、断点续传

1:在实际应用中我们经常使用到网盘服务,他们可以高效的上传下载较大文件。那么这些高性能文件传输服务,都需要实现的分片发送、断点续传功能。2:在Java文件操作中有RandomAccessFile类,他可以支持文件的定位读取和写入,这样就满足了我们对文件分片的最基础需求。3:Netty服务端启动后,可以向客户端发送文件传输指令;允许接收文件、控制读取位点、记录传输标记、文件接收完成。4:为了保证传输性能我们采用protostuff二进制流进行传输。@Override//对象传输处理。

优快云_LiMingfly的博客 1291

Netty实战一 Netty实现文件的上传和下载

目录 一、Netty应用场景 二、Netty实现文件的上传和下载 三、程序演示 1、下载演示 2、上传演示 一、Netty应用场景 讲了一些Netty的组件,来聊一聊大家最关心的事情吧,他能够做什么?毕竟,我们学习就是拿来用的嘛。我可以简单的概括一下,凡是牵扯到网络相关的,都可以使用Neety去实现! 构建高性能、低时延的各种 Java 中间件,例如 MQ、分布式服务框架、E...

b379685397的博客 3万+

用SPRINGMVC 实现断点续传 (HTTP)

我们主要是做政府项目,客户也都是政府单位的,对用户体验要求比较高,要让他们感觉用的方便,对稳定性要求比较高,基本上一年365天都不希望你出问题,对安全性要求也比较高,涉密了,信创国产化,不能连外网的,都是内网。免费提供技术支持,电话支持,微信支持,QQ支持,远程一对一专业技术支持,可以说是全球唯一提供免费技术支持了,提供原理讲解,提供视频教程,这个也是全球唯一的。免费提供源码讲解服务,功能讲解,逻辑讲解,原理讲解,思路讲解,核心代码功能实现讲解,新业务功能扩展指导,免费提供编译指导,免费提供部署指导。

alisky119的博客 1286

使用 Netty 远程传输文件

一点睛 Netty作为NIO框架,自然支持文件传输功能。本篇演示如何使用Netty进行远程发送文件。 二待发送的文件 package netty.file; import java.io.File; import java.io.Serializable; /** * @className: MySendFile * @description: 待发送的文件 * @date: 2022/5/28 * @author: cakin */ public class MySen...

实践求真知 3865

厉害了,Netty 轻松实现文件上传!

作者:rickiyang 今天我们来完成一个使用netty进行文件传输的任务。在实际项目中,文件传输通常采用FTP或者HTTP附件的方式。事实上通过TCP Socket+File的方式进行文件传输也有一定的应用场景,尽管不是主流,但是掌握这种文件传输方式还是比较重要的,特别是针对两个跨主机的JVM进程之间进行持久化数据的相互交换。 而使用netty来进行文件传输也是利用netty天然的优势:零拷贝功能。很多同学都听说过netty的”零拷贝”功能,但是具体体现在哪里又不知道,下面我们就简要介绍下: .

chinaherolts2008的博客 1423

SpringBoot整合Netty并使用Protobuf进行数据传输(附工程)

前言 本篇文章主要介绍的是SpringBoot整合Netty以及使用Protobuf进行数据传输的相关内容。Protobuf会简单的介绍下用法,至于Netty在之前的文章中已经简单的介绍过了,这里就不再过多细说了。 Protobuf 介绍 protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#...

weixin_33753003的博客 1276
上一篇: 使用Netty作为底层框架,作为文件上传系统。SpringBoot+Netty+SpringTask
下一篇: 使用MybatisPlus中遇到的问题
工作这么多年,学会了内卷
博客等级 码龄7年 156粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

工作这么多年,学会了内卷

共同加油,继续努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值