winrar 注册版-电视频道下载
2023年4月3日发(作者:离线迅雷)
⽂件和参数⼀起上传_基于netty的⽂件上传下载组件
1.简介
该组件基于netty3.6.3实现,具有如下功能:⽂件上传,⽂件替换,⽂件删除,如果是图⽚的话,还可以⽣成缩略图等功能。
使⽤简单,只需要引⼊netty-file-client,即可以实现⽂件的以上操作。
该组件的代码结构分为两部分,客户端组件(netty-flie-client)和服务端组件(netty-flie-server)。如下图所⽰:
-file-client
2.1概述
客户端组件主要提供对外访问服务端组件的接⼝,提供以下接⼝:⽂件上传,⽂件替换,⽂件删除,如果是图⽚的话,还可以⽣成缩略图等
功能。代码结构如下:
包是该组件的核⼼包,FileClient类是对外提供接⼝的⼯具类。具有以下⽅法:
File⽂件上传,对应⽂件处理句柄类为:UploadFileClientHandler
File删除服务端⽂件,对应⽂件处理句柄类为:DeleteFileClientHandler
eFile替换服务端⽂件,对应⽂件处理句柄类为:ReplaceFileClientHandler
ThumbPicture⽣成缩略图,对应⽂件处理句柄类为:CreateThumbPictureClientHandler
以上所有句柄类的⽗类均为UploadFileClientHandler,该类实现了⼀些共有⽅法,⽐如⼀些公共参数的包装等。
2.2实现步骤
实现步骤以上传⽂件为例,其他类似实现。
直接上代码:
/***⽂件上传*@paramfile需要上传的⽂件*@paramfileName⽂件名称*@paramthumbMark是否需要⽣成缩略图*@return*@author:landyChris*/publicsta
具有三个参数,前⾯⼏⾏代码都是很⼀些netty的初始化⼯作,具体看⼀个私有⽅法uploadFile,如下代码所⽰:
privatestaticvoiduploadFile(ClientBootstrapbootstrap,Stringhost,
intport,Filefile,StringfileName,StringthumbMark,
StringuserName,Stringpwd){
//1.构建uri对象
URIuri=getUri(host,port);
//2.连接netty服务端
ChannelFuturefuture=t(newInetSocketAddress(host,
port));
//3.异步获取Channel对象
Channelchannel=ninterruptibly().getChannel();
if(!ess()){
se().printStackTrace();
eExternalResources();
return;
}
//4.初始化⽂件上传句柄对象
WrapFileClientHandlerhandler=newUploadFileClientHandler(host,uri,
file,fileName,thumbMark,userName,pwd);
//5.获取Request对象
HttpRequestrequest=uest();
//6.获取Http数据处理⼯⼚
HttpDataFactoryfactory=getHttpDataFactory();
//7.进⾏数据的包装处理,主要是进⾏上传⽂件所需要的参数的设置,此时调⽤的句柄是具体的UploadFileClientHandler对象
HttpPostRequestEncoderbodyRequestEncoder=handler
.wrapRequestData(factory);
//8.把request写到管道中,传输给服务端
(request);
//9.做⼀些关闭资源的动作
if(ked()){
(bodyRequestEncoder).awaitUninterruptibly();
}
iles();
seFuture().awaitUninterruptibly();
eExternalResources();
llHttpDatas();
}
主要有以下实现步骤:
1.构建uri对象
2.连接netty服务端
3.异步获取Channel对象
4.初始化⽂件上传句柄对象
5.获取Request对象
6.获取Http数据处理⼯⼚
7.进⾏数据的包装处理,主要是进⾏上传⽂件所需要的参数的设置,此时调⽤的句柄是具体的UploadFileClientHandler对象
8.把request写到管道中,传输给服务端
9.做⼀些关闭资源的动作
10.具体细节实现请参考github上的代码。如果各位读者喜欢的话,可以加个star哈。
-file-server
3.1概述
服务端组件实现功能也是跟客户端⼀致,具有以下功能:⽂件上传,⽂件替换,⽂件删除,如果是图⽚的话,还可以⽣成缩略图等功能。代
码结构如下图所⽰:
包是该组件的核⼼包。具体的处理句柄类有以下⼏个:
1.⽂件上传:UploadFileServerHandler
2.删除⽂件:DeleteFileServerHandler
3.替换⽂件:ReplaceFileServerHandler
4.⽣成缩略图:CreateThumbPictureServerHandler
以上所以句柄类的接⼝均为FileServerProcessor,并且继承了抽象类AbstractFileServerHandler。
3.2实现步骤
具体实现步骤还是以⽂件上传为例。
⾸先rverHandler类会持续监听客户端的请求,如果是⽂件处理动作,则会进⼊messageReceived⽅
法进⾏相应的处理逻辑。该类定义了以下成员变量:
//http请求privateHttpRequestrequest;//是否需要断点续传作业privatebooleanreadingChunks;//接收到的⽂件内容privatefinalStringBufferresponseContent=n
该⽅法实现中,如果⽂件⼤⼩⼩于chunked的最⼩值,则直接进⾏⽂件上传操作。否则,需要进⾏分块处理。然后进⾏⽂件上传操作。
⽂件⼤⼩⼩于1k的操作:
需要分块处理操作:
以上操作主要有两个注意点:
1.请求参数的解析⼯作(根据HttpDataType进⾏相应参数的赋值操作)
2.根据解析的参数进⾏相应的⽂件处理操作(根据⽂件操作类型,选择相应的处理句柄进⾏⽂件处理)
更多推荐
句柄类
发布评论