Asp.NET大文件上传组件开发总结(六)---大文件上传组件使用说明

时间:2022-08-29 08:37:13
 

1编写目的

为了方便用户使用大文件上传组件,特写使用说明书,以指明调用组件的接口,操作流程和注意事项。

2背景

由于ASP.NET在上传文件时,是全部装入服务器内存,在上传文件时,消耗服务器资源较多,且不能提供上传进度显示,由于消耗服务器资源较多,所以ASP.NET上传文件时往往大小受到限制。此组件解决了所有这些问题

3定义

大文件:大文件主要意思是指大小不受限制,

Web.config:是ASP.NET的配置文件。

4功能

所有需要用ASP.NET上传文件的地方,均可以使用本组件。本组件可以解除ASP.NET对上传文件大小的限制,同时提供上传进度提示,用户还可以选择中断上传过程。减少对服务器资源的消耗(经测试,服务器资源消耗与运行普通ASP.NET页面相差无几)

5、组件主要类及操作:

5.1 BigFileUploadModuleHandle

大文件上传处理模块,用于在客户端请求发送到服务器上后,分析请求内容,如果是上传文件,则在IIS将数据出发送到ASP.NET的管道中时,读取数据,写入文件,并重新组织请求内容,重新组织的内容是去掉了文件内容的请求内容。页面在接收到请求后,除文件上传控件不能读取文件内容外,其它组件的属性可以正常访问。

5.2 DataReader

请求数据分析和文件写入。

5.3 UpFileInfo

上传文件属性结构,供组件内部使用。

5.4 UploadContext

文件上传环境,组件在使用时,主要使用此类。具体有以下方法和属性:

UploadContext:构造函数,需传入文件上传页面对象和文件临时存放目录。外部不能直接调用些构造函数,要构建文件上传环境,需调用UploadContextFactory的提供的静态方法

TmepFileDir:获取和设置上传临时文件存放路径

FileNames上传的文件名列表

TotalLength发送信息总长度,包括页面所有控件请求内容

Readedlength已接收的信息长度 包括面页控件请求内容

StartReadDateTime开始接收时间    

FileConIds页面文件上传控件ID列表,对文件上传控件在服务器端运行时,为控件的UniqueID

GUID:上传文件唯一标志

Abort :设置和读取是否中断上传过程

Ratio上传速率,返回每秒上传的字节数

FormatRatio获取格式化的上传速度,以适当的字节,K字节,M字节表示

LeftTime估计上传剩余时间,以秒为单位

FormatLeftTime获取格式上的上传剩余时间,适当的以小时,分钟,秒表示

CurrentFile当前正在处理的上传文件

Status上传状态

FormatStatus 以字符串格式,返回当前上传操作的状态

SaveFile另存上传的数据文件,此方法主要将文件从临时存放目录移到用户需要求的目录,由于采取移动文件办法,所以此方法调用成功后,临时文件对应文件将被移走。

GetFileNameByControl根据页面文件上传控件名称,获取上传的文件名

Dispose当前上下文环境中接收的所有文件

GetFileName :根据文件上传控件名称,获取对应的上传的文件。

5.5 UploadContextFactory

创建和获取文件上传环境。

InitUploadContext(System.Web.UI.Page page,string TempFileDir)根据页面对象和上传文件临时目录文件夹,获取一个文件上传上下文类实例

GetUploadContext根据页面发送的上传会话编号,获取文件上传上下文

GetUploadContext(string GUID)根据会话编号的GUID获取文件上传的上下文

Release在页面逻辑处理完成后,释放上传上下文,并删除临时文件

uploadStatus:文件上传状态枚举类

6 使用方法及注意事项

1、 将组件dll复制到应用系统bin目录,然后再VS.NET中引用本组件,

2、 web.config增加ASP.NET处理模块

<httpModules>

<add name="BigFileUploadModuleHandle " type="HelpSoft.BigFileUploadModuleHandle,BigFileUploadHandle" />

</httpModules>

3、 在要上传文件的asp.net页面的页面装入事件中或初始化事件中,初始化文件上传环境,注册文件上传存放的临时文件夹,如下面代码:

private void Page_Load(object sender, System.EventArgs e)

{

       UploadContext context = UploadContextFactory.InitUploadContext(this, @"c:" myupload"");

}

提示:A、文件存放目录要求设置相应的访问权限,目录必须存在

      B、初始化上传环境后,页面须在一天内发送文件。否则上传环境失效。

      C、初始化上传环境时,组件将在页面内注册隐藏域,记录上传会话唯一标志。隐藏域命名为UploadID,页面不能有同名控件。

        D、需要上传文件表单编码方式必须为multipart/form-data,(对于文件上传控件作为服务器端控件运行时,系统会自动加入此编码方式,否则需用户手工添加)

        E、要使本上传组件生效,必须在页面访问时初始化上传环境,和设置表单编码方式,反之,如不希望本组件对特定页面生效,只可取消前两条件之一。

4、 在文件上传提交事件中,直接从上传文件环境工厂类中获取文件上传环境,进一步获取上传的文件信息。类似代码如下:

UploadContext context = UploadContextFactory.GetUploadContext();

string FileName = context.GetFileNameByControl(resFile.UniqueID);

string filePath=@"c:"workdir";           

if (context.SaveFile(resFile.UniqueID,filePath+FileName))

{

       UploadContextFactory.Release();

}

提示:A、根据控件名获取对应的上传文件信息时,对服务器控件需要传入控件唯一标志,对非服务器控件,需传入控件名称。

       B、对文件另存时的目录访问权限,是否存在、可用空间大小,由页面调用者检查处理。如此类型错误发生,系统将引发对应异常。

C、如没找到控件对应文件(可能是客户端没有指定文件或传的控件标志有误)、临时目录中对应文件也不存在(已成功调用过此方法,文件已被移走),本方法将返回假,操作成功后,方法返回真。

DUploadContextFactory.Release()将从系统缓存中清除上传环境对象,将不能用GetUploadContext方法获取上传环境,但已取得的上传环境仍然可用。

5、 读取文件上传进度时,需另建一个ASPX页面,读取进度主要是根据上传文件的会话唯一标志,从系统缓存中(通过GetUploadContext(string GUID)方法))获取上传文件环境,访问此环境类,即可以获取文件上传开始时间、信息总长度、当前已传送信息长度、速度、估计剩余时间等信息。系统再使用定时刷新的办法,不断获得上传进度信息,即可形成上传进度提示。

进度显示可以使用XML无回刷新方式,也可以使用页面定时刷新方式。

6、 要在传输过程中,中断传输入过程,只需用会话唯一标志,获取上传环境,将一上传环境的abort属性设为真,系统将主动与客户端断开连接,中断上传过程,同时页面提交的其它数据也将取消。