package cn.gistack.by.nettyUpload; import cn.gistack.by.nettyUpload.config.NettyHttpConfig; import cn.gistack.by.nettyUpload.utils.ExceptionUtils; import cn.gistack.by.picUpload.service.BaiyiPicService; import cn.gistack.resource.feign.IOssClient; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelOption; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler; import lombok.extern.slf4j.Slf4j; /** * netty实现http协议上传文件 服务端 * * @author Kai.Shan * @date 2024-11-13 14:33 */ @Slf4j public class HttpUploadFileServer implements Runnable { private NettyHttpConfig nettyHttpConfig; private IOssClient iOssClient; private BaiyiPicService baiyiPicService; public HttpUploadFileServer(NettyHttpConfig nettyHttpConfig, IOssClient iOssClient ,BaiyiPicService baiyiPicService) { this.nettyHttpConfig = nettyHttpConfig; this.iOssClient = iOssClient; this.baiyiPicService = baiyiPicService; } public void run() { NioEventLoopGroup bossGroup = new NioEventLoopGroup(this.nettyHttpConfig.getBossGroupThreads()); NioEventLoopGroup workerGroup = new NioEventLoopGroup(this.nettyHttpConfig.getWorkerGroupThreads()); try { ServerBootstrap bootstrap = new ServerBootstrap(); bootstrap.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) .option(ChannelOption.SO_BACKLOG, nettyHttpConfig.getNettySoBacklog()) .handler(new LoggingHandler(LogLevel.INFO)) .childHandler(new HttpUploadFileInitialzer(nettyHttpConfig,iOssClient,baiyiPicService)); Channel channel = bootstrap.bind(this.nettyHttpConfig.getServerSocketIp(),this.nettyHttpConfig.getServerSocketPort()) .sync().channel(); System.out.println("upload server started ...."); channel.closeFuture().sync(); } catch (Exception exception) { exception.printStackTrace(); log.error(ExceptionUtils.getStackString(exception)); } finally { bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } } }