1.4 大文件上传
这次要求上传相对较大的东西。 没办法继续研究了,所以就先对于这个系统来说明一下。基于WEB的文件上传可以使用FTP和HTTP两种协议,FTP传输稳定,但安全性有待提高,而且FTP服务器读取用户库获取权限,对于用户使用来说还是不太便捷。 只有HTTP才能有效解决这些问题。在一些情况下,在现实准备接受数据前,服务器先对表中数据的某些元素进行验证是推荐的做法。经过一定的考虑后,我们认为如果服务器想这样做。这样可以迅速处理一些基本的问题,保障了程序的可行性,而那些简单的应用的则可以实现得方便,而我们也可以很轻松[1]。
HTTP协议需要知道整个事务处理中的内容总长度及一些属性。对于一些文件的总长度,我们应该提前知晓,这样系统服务器就能够判断文件的内容是否可以进行完整地处理,从而返回一个错误代码并关闭该操作的可行性,而不用等到完成所有的数据操作再进行判断。
在任何情况下,如果接受的文件操过了系统的最大限制,服务器就会终止这次操作。
1.5 基于Asp.net平台文件上传的介绍
我们在用ASP.NET上传一些重要的文件时,设置很大的maxRequestLength值并不能有效的解决一些现有的问题,比如遇到太大的上传软件,我们经常会见到Internet Explorer显示 "The page cannot be displayed - Cannot find server or DNS Error",这个错误。这是个client side错误,是解决不了的,也解决不到的[7]。
方案原理操作:
利用HttpHandler实现了ISAPI Extention的一些功能需求,处理请求的信息和发送响应。
方案要点如下:
1. httpHandler or HttpModule
a.在asp.net进程处理request请求之前截获request对象
B.实时读取和写入数据
c.实时跟踪上传进度更新的信息
2. 利用隐含的HttpWorkerRequest用它的GetPreloadedEntityBody 和 ReadEntityBody方法处理文件流程[7]
IServiceProvider provider = (IServiceProvider) HttpContext.Current;
HttpWorkerRequest wr = (HttpWorkerRequest) provider.GetService(typeof(HttpWorkerRequest));
byte[] bs = wr.GetPreloadedEntityBody();
....
if (!wr.IsEntireEntityBodyIsPreloaded())
{
int n = 1024;
byte[] bs2 = new byte[n];
while (wr.ReadEntityBody(bs2,n) >0)
{
.....
}
}
3. 自定义Multipart MIME 解析器操作[3]。
自动截获MIME分割符操作。
将文件分块操作成临时文件进行处理。
实时更新Appliaction 状态(ReceivingData, Error, Complete) 。
2 系统开发工具介绍
2.1 系统开发工具概述
本系统前台数据库采用Microsoft SQL Server 2005,该数据库系统在安全方面、准确率方面很不错,运行速率快,并且处理高效快捷;后台选择以.NET平台作为开发平台,以C#作为开发语言,采用Visual Studio 2005作为主要的开发工具,可与SQL Server 2005数据库无缝连接,更好的完善系统[2]。
2.2 Visual Studio.NET平台简介源1自37518.论~文'网·www.751com.cn
Visual Studio .NET 是一套完整开发软件,一般用于生成应用程序。Visual Basic .NET、Visual C++ .NET、Visual C# .NET 和 Visual J# .NET 全都使用相同的集成开发环境 (IDE),在这个环境下,它们共享工具并有助于建立混合语言解决方案[4]。
Visual Studio .NET 集成开发环境现在包括开发智能设备(如 Pocket PC)应用程序的工具。通过使用这些工具,我们受益颇多。