一、Asp.net中的文件上传

  在Asp.net 1.1中,文件在上传过程中将被全部保存在内存中,对于大文件来说,会造成内存空间的过度使用,可能会招致恶意攻击。为了解决这个问题,Asp.net在配置文件中提供了一个参数来控制上传文件的尺寸,这个配置参数定义在System.Web元素的子元素HttpRuntime元素中。maxRequestLength属性用来设置允许的最大请求长度,这个参数的单位是KB,默认情况下,参数的值为4096,也就是最大能上传大约4M大小的文件。如果希望上传10M的文件,可以设置配置文件WebConfig.config如下:

<system.web>
<httpRuntime maxRequestLength="10240" />
</system.web>

  在Asp.net 2.0之后,上传的文件可以缓存到文件中,以减少对内存的消耗。httpRuntime元素提供了一个新的配置参数requestLengthDiskThreshold属性,用来设置一个上传文件尺寸的临时大小值,超过这个值,请求的内容将会被保存到文件中。这个参数的单位也是KB,默认为80,这个值不应该超过maxRequestLength参数。

  maxRequestLength元素虽然可以自定义设置,但是最大也不能超过2097151KB(最大不能大于2G),可以看到还设置了executionTimeout元素, executionTimeout元素表示请求允许被执行的秒数,默认为110秒(.Net Framework1.1 时默认为:90秒);

  当上传文件越大,执行请求的时间也就越长,所以根据设置的maxRequestLengtht适当的调整executionTimeout元素的值(单位为:秒)。

  当请求的内容长度超过门槛的限值之后,请求的内容将会被保存到文件中,这个文件的位置由compilation配置元素的tempDirectory属性指定。

<compilation tempDirectory="D:\123\" targetFramework="4.0"/>

  当这个参数的值为空时,临时文件将会笨哦保存在%FrameworkInstallLocation%\Temporary ASP.NET文件夹下。在Windows7下使用开发服务器的时候,临时文件会保存在C:\Users\用户名\AppData\Local\Temp\Temporary ASP.NET Files\中。

  Asp.net 2.0的有了很大的改进,但是对于大型文件的上传,我们并不能掌握上传的进度,在AJAX中,就难以显示一个动态的上传进度条,不能提供给用户一个友好的上传进度反馈。在Asp.net 2.0之后,直到Asp.net 4.0中,当使用multipart/form-data方式的请求时,Asp.net会将请求的Post数据通过System.Web.HttpRawUploadedContent进行管理,这是一个内部类,我们不能直接使用,HttpRequest的私有成员_rawContent将指向这样一个对象的实例。

二、文件上传的解决方案

  在Asp.net中,浏览器的请求数据到达Asp.net网站后,被包装为一个内部的对象HttpWorkerRequest,客户端发送到服务器的数据在内部通过这个对象来读取,HttpRequest提供了针对请求数据的包装,从Asp.net 2.0开始,在上传文件过程中,上传的数据通过HttpRawUploadedContent对象来表示,这是HttpRequest的一个内部成员,可以通过HttpRequest还没有读取上传文件的情况下,接管Asp.net对请求参数的读取过程,实现自定义针对文件上传处理。
对于其他的Post数据,可以通过反射来构建一个模拟的HttpRawUploadedContent对象实例,提供给HttpRequest使用,保证在后继的处理中正常获取表单的数据。

  1、通过HttpModule接管请求参数

  在文件上传过程中,Asp.net架构的底层会读取HTTP请求中的信息,在系统内部创建一个类型为HttpRawUploadedContent的对象来表示请求参数,这个对象被HttpRequest对象所使用。

  为了接管HttpRequest对请求参数的处理,我们注册HttpApplication的最早的事件BeginRequest,然后将读取的数据保存到一个自定义的对象中。为了能够在后继的处理过程中继续通过HttpRequest来访问请求数据,我们创建一个伪造的HttpRawUploadedContent提供给HttpRequest对象使用。

HttpApplication实战大文件上传 (第四篇)的更多相关文章

  1. Selenium2学习-039-WebUI自动化实战实例-文件上传下载

    通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a ...

  2. 解决PHP大文件上传问题

    PHP大文件上传问题    今天负责创业计划大赛的老师问我作品上报系统上传不了大文件,我当时纳闷了,做的时候没限制上传文件的大小阿,怎么会传不了呢,自己亲自体验了番,果然不 行,想了好一会儿才有点眉目 ...

  3. 【原创】用JAVA实现大文件上传及显示进度信息

    用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 (本文提供全部源码下载,请访问 https://github.com/grayprince/UploadBigFil ...

  4. 使用NeatUpload控件实现ASP.NET大文件上传

    使用NeatUpload控件实现ASP.NET大文件上传 一般10M以下的文件上传通过设置Web.Config,再用VS自带的FileUpload控件就可以了,但是如果要上传100M甚至1G的文件就不 ...

  5. 用JAVA实现大文件上传及显示进度信息

    一. 大文件上传基础描述: 各种WEB框架中,对于浏览器上传文件的请求,都有自己的处理对象负责对Http MultiPart协议内容进行解析,并供开发人员调用请求的表单内容. 比如: Spring 框 ...

  6. C# 大文件上传

    IHttpModule 分块上传大文件 IHttpModule 分块上传大文件 来源:http://www.cnblogs.com/HeroBeast/archive/2008/03/18/10848 ...

  7. vue大文件上传控件选哪个好?

    需求: 项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在20G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以20G来进行限制. PC端全平台支持,要求支持Window ...

  8. vue大文件上传组件选哪个好?

    需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是 ...

  9. web实现大文件上传分片上传断点续传

    需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是 ...

随机推荐

  1. BZOJ 1497 最大获利(最大权闭合子图)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1497 思路:由题意可以得知,每个顾客都依赖2个中转站,那么让中转站连有向边到汇点,流量为它的建设费用 ...

  2. Cocos2d-x程序Windows下VC中文乱码的解决(用MultiByteToWideChar进行转换,VC2010有非常厉害的execution_character_set)

    Cocos2d-x默认字符串常量编码都是UTF8的,而Windows中的VC默认都是跟系统相同,比如简体Windows是GB2312或者GBK.繁体就是BIG5编码.而我们大多数中国人用VC编译出来的 ...

  3. Roman numerals

    Roman numerals 罗马数字的题目, 注意几个关键的数字即可: (100, 400, 500, 900) -> ('C', 'CD', 'D', 'CM'); (10, 40, 50, ...

  4. Java异常的使用

    1.exception的分类 java将异常分为两种,checked exception和unchecked exception(一般指runtimeException). checked excep ...

  5. Horner规则

    霍纳(Horner)规则是采用最少的乘法运算策略,求多项式 A(x) = a[n]x^n + a[n-1]x^(n-1) + ... + a[1]x^1 + a[0]x^0 在x处的值. 该规则为 A ...

  6. 本地plsqldev.exe连接远端oracle数据库

    先看百度经验:http://jingyan.baidu.com/article/48b558e3540ecf7f38c09a3c.html 这里如果我们只有安装plsql工具,下载oracle精简版本 ...

  7. ssh登录失败处理步骤

    如果登录失败而又找不到显示的原因,优先使用ssh -vT name@ip -p port 进行调试,查看所使用的key文件.ip.端口是否正确.然后再检查下面步骤:1.检查在对应用户名下是否有iden ...

  8. Chosen 基本使用

    点击下载Chosen 引入文件 chosen.css jquery-1.7.1.min.js chosen.jquery.js 绑定数据: for (var i = 0; i < data.le ...

  9. Traceroute原理介绍

    一.路由追踪 路由跟踪,就是获取从主机A到达目标主机B这个过程中所有需要经过的路由设备的转发接口IP. 二.ICMP协议 Internet控制报文协议(internet control message ...

  10. 机器设备(dfs)

    机器设备 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 Alpha 公司设计出一种节能的机器设备.它的内部结构是由 N 个齿轮组成.整个机器设备有 一个驱动齿轮,当 ...