知识大全 Asp.NET大文件上传开发总结(二)

Posted 内容

篇首语:获取生活中最丰硕果实和最大享受的秘密在于,冒险犯难地生活!本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Asp.NET大文件上传开发总结(二)相关的知识,希望对你有一定的参考价值。

Asp.NET大文件上传开发总结(二)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  为了提供文件内容 我们需要首先需确定客户请求中发送的有文件内容 然后确定文件内容的位置 这部分对应的代码如下

  

  

   HttpApplication app = sender as HttpApplication;             HttpWorkerRequest request = GetWorkerRequest(app Context);                         if (!IsUploadRequest(app Request)) return; //不是文件上传 则退出                         string sContentType = app Request ContentType ToLower();             byte[] arrBoundary = GetMultipartBoundary(sContentType);             int ContentLength = app Request ContentLength; //信息体的总长度             DataReader dataReader = new DataReader(app Context Request ContentEncoding

  arrBoundary);             DateTime startDate = DateTime Now;             byte[] arrBuffer = request GetPreloadedEntityBody();             if (arrBuffer == null)                             arrBuffer = new Byte[ ];                 tempFile Close();                 return; //没有读取到信息体                         else                          这里是对文件内容的处理            

  上面的代码中 我们先获取Asp NET对客户端请求的处理对象HttpWorkerRequest 然后根据这个对象的ContentType属性是否为multipart/form data来确定对应的请求是否有上传文件 如果没有上传文件 就不处理此请求 以提高处理效率 这样处理的依据是 在有文件上传的HTML Form中 对应的enctype属性为multipart/form data 这样就解决了确定客户端请求中是否发送有文件内容

  要确定文件的内容位置 为此我们需要使用Reflector工具反编译System Web dll中HttpRequest的代码 可以发现有一个GetEntireRawContent方法 这个方法里 调用了HttpWorkerRequest对的GetPreloadedEntityBody方法来获取数据 可喜的是 这个方法是Public的 所以我们也可以直接调此方法来获取客户端发送的数据

  获取数据后 我们可以将这些数据写入到一个文件中 这些数据是byte[]类型的 在写入文件时 因为Http协议是基于文本的 所以我们可以采用System Text Encoding GetString方法 将这些字节数组编码成字符串 我这里的编码采用ASCII 只是这样请求中的中文就成了乱码 这样就可以获取请求的内容的文体格式 以方便我们分析(在代码中 这个写文件的功能我已去除 因为这里写全部请求内容只是用于分析使用 请参见第一篇文章中我列出的请求内容示例)

  通过分析这些请求内容 我们可以发现 每个页面控件 均可以在这里找到对应的内容 两个控件内容间是用字符串 d e d c 分隔的 同时在我们反编译System Web dll中HttpRequest的代码时 也可以发有GetMultipartBoundary这个方法 这个方法我们可以从字面意思得知是取分隔标识 我们把这个方法提取出来

  

  

   private byte[] GetMultipartBoundary()     string attributeFromHeader = GetAttributeFromHeader(this ContentType boundary );     if (attributeFromHeader == null)             return null;         attributeFromHeader = + attributeFromHeader;     return Encoding ASCII GetBytes(attributeFromHeader ToCharArray());

  然后我们采用这个方法 就可以从请求的内容中提取出类似 d e d c 这样的字符串 这样 我们就可以分隔页面内不同控件的内容了

  最后 我们分析文件上传控件的内容

  

  

  Content Disposition: form data; name= file ; filename= C:\\Documents and Settings

  \\Administrator\\??????\\ponentart web ui rar Content Type: application/x rar pressedRar! ??s

  我们可以发现 文件上传控件有一个filename属性 然后 下一行指定文件的MIME类型 随后这个空白行 在空白行下面 直到下一处类似 d e d c 标志字符串间 就是客户端发送的文件内容 我们只需把这些内容写入到服务器文件中即可 cha138/Article/program/net/201311/12493

相关参考

知识大全 Asp.NET大文件上传开发总结集合

Asp.NET大文件上传开发总结集合  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  以前开发过一

知识大全 Asp.NET大文件上传组件---提取文件内容

Asp.NET大文件上传组件---提取文件内容  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  为

知识大全 在ASP.NET中如何进行文件上传?

在ASP.NET中如何进行文件上传?  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!上传文件的步骤:

知识大全 ASP.NET中文件上传下载方法集合

ASP.NET中文件上传下载方法集合  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  文件的上传下

知识大全 ASP.NET带进度条多文件上传

ASP.NET带进度条多文件上传  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  )解压jquer

知识大全 ASP.NET中上传文件到数据库

ASP.NET中上传文件到数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一介绍  为什么

知识大全 ASP.NET2.0中将文件上传到数据库

ASP.NET2.0中将文件上传到数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  此问题经

知识大全 Asp.Net 无刷新文件上传并显示进度条的实现方法及思路

Asp.Net无刷新文件上传并显示进度条的实现方法及思路  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 ASP.NET项目开发指南:自定义Web.Config文件配置节

ASP.NET项目开发指南:自定义Web.Config文件配置节  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 添加ASP.NET网站资源文件夹

ASP.NET开发宝典:添加ASP.NET网站资源文件夹  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下