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.根据解析的参数进⾏相应的⽂件处理操作(根据⽂件操作类型,选择相应的处理句柄进⾏⽂件处理)

更多推荐

句柄类