All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
一步步教你配置SQL SERVER合并复制(三)配置Distributor_[SQL Server教程]
Ajax核心:XMLHTTP组件相关技术资料_[AJAX教程]_0
PHP截取UTF-8字符串,解决半字符问题_[PHP教程]
将DataGrid或GridView中的数据生成Excel_[Asp.Net教程]
ASP.NET,Framework之OPENFILENAME,新元素初探_[Asp.Net教程]
AJAX在VS2005中的简单应用_[Asp.Net教程]
SQL语言快速入门之一_mssql学习_编程技术
用ASP.NET,2.0主题控制网站外观_[Asp.Net教程]
C#文件处理技术:FileInfo和DirectoryInfo
SQLServer和Access、Excel数据传输_[SQL,Server教程]
Reading number is top 10 pictures
I also want to live a June 1 children's day, dad
No trading, no killing
Steal to eat bacon bird
含苞欲放的素颜美少女3
猫眯也疯狂
Sora aoi mirror memorial classics3
A cat have life principles
壮丽的云彩2
美女就是美女
The little girl with long hair1
Download software ranking
ASP.NET.2.0.XML.高级编程(第3版)
超级战舰
White deer villiage
linux初级教程
Eclipse 4.2.2 For Win32
变速齿轮3.26
WebService在.NET中的实战应用教学视频 → 第4集
豪门浪荡史
The hero
Sora aoi, the maid, students' uniforms
归海一刀 published in(发表于) 2014/1/30 0:59:27 Edit(编辑)
Asp.NET大文件上传组件开发总结(三)---处理文件内容_[Asp.Net教程]

Asp.NET大文件上传组件开发总结(三)---处理文件内容_[Asp.Net教程]

Asp.NET大文件上传组件开发总结(三)---处理文件内容_[Asp.Net教程]

这一篇相对就要简单一些了,只需要确定对文件的处理思路和与Asp.NET页面信息的传递的问题。


.NET1.1中,Asp.NET将获取的请求内容放入到一个Byte[]类型中,但在Asp.NET2.0中,却将数据封装到一个类型为System.Web.HttpRawUploadedContent的对象中,在这个新对象中,有一个重要的属性:_file,这个属性的类型为TempFile。正好是这个类型提供了将请求内容保存到临时文件的功能。这些信息都可能通过Reflector工具反编译获得(所以啊,做.NET开发,这个工具是必备的)。


在HttpRequest类中,我们可以发现如下用于分析页面各控件值的代码:
private MultipartContentElement[] GetMultipartContent()
{
if (this._multipartContentElements == null)
{
byte[] multipartBoundary = this.GetMultipartBoundary();
if (multipartBoundary == null)
{
return new MultipartContentElement[0];
}
HttpRawUploadedContent entireRawContent = this.GetEntireRawContent();
if (entireRawContent == null)
{
return new MultipartContentElement[0];
}
this._multipartContentElements = HttpMultipartContentTemplateParser.Parse(entireRawContent, entireRawContent.Length, multipartBoundary, this.ContentEncoding);
}
return this._multipartContentElements;
} 说了这么多,只是说明了一个问题:通过改变Asp.NET页面对象的属性值来向页面传送是比较麻烦的。所以我采取单件模式的设计思路。具体是,将获取的文件内容写入到磁盘文件;每次上传文件过程中,初始化一个会话标志,页面通过这个会话标志来提取这些文件信息。在系统中,定义了两个类用来处理这项工


作:
UploadContext用于封装文件信息。
类UploadContextFactory用于会话标志的管理。

在上传页面里,组件将在页面中注册一个名为UploadID的Hidden字段。存放一个GUID作为会话标识。这个标志会在文件上传时,出现在请求内容中,组件通过获取这个会话标志和文件内容,正确将文件保存到临时目录中,并将提取文件信息供页面使用。页面则根据Request["UploadID"]字段在类UploadContextFactory提取上传文件对应的会话标志,并获取文件信息。这样就实现了页面对文件内容的提取。

这样,要求在上传页面的Page_Load事件中,采用如下语句来初始化一个会话,并指定存放文件的目录。


UploadContext context = UploadContextFactory.InitUploadContext(this, @"c:\myupload\");
在需要获取文件信息的地方:采用如果语句来获取:
UploadContext context = UploadContextFactory.GetUploadContext();
if ((context != null) && (context.Status == uploadStatus.Complete))
{
context.SaveFile(file1.ClientID, Request.MapPath("/myupload/"));
}
当然这里就存在一个问题是:会话标志过期及没有初始化标志上传文件时的处理(如不请求页面,而直接发送文件,这可能会在用户使用其它工具发送时出现)。这个问题暂时没有处理。


现在,上传的文件可以上传到服务器了,页面也可以获取上传的文件内容以作进一步处理,如限制文件类型、存放到数据库等。


感觉思路有点乱了,那就先写出来,我随后再来整理。







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.