系统默认是忽略web.config中超时设置的,为我们提供了文件上传

  • 栏目:软件 时间:2020-04-25 16:15
<返回列表

我们在配置好了php.ini后超时和上传大小都设置了,但是使用浏览器上传大一点文件还是不能成功!

一个刚上线不久的web项目(internet环境),里面有大文件上传功能,前一阵一直运行得蛮好的,昨天觉得运行比较稳定后,把debug=true改成false,关掉了调试模式,结果今天反馈上传文件时,经常出现超时,刚开始以为是网络问题,因为上传代码一直没有改过,但后来在局域网测试也是这样,这才意识到是debug=false引起的,原来debug=true的时候,系统默认是忽略web.config中超时设置的,所以之前并没有暴露出web.config超时时间设置太短这个问题,重新把web.config的超时时间改长了一点,终于皆大欢喜了.

我们大家都知道ASP.NET为我们提供了文件上传服务器控件FileUpload,默认情况下可上传的最大文件为4M,如果要改变可上传文件大小限制,那么我们可以在web.config中的httpRuntime元素中添加maxRequestLength属性设置大小,同时为了支持大文件上传超时可以添加executionTimeout属性设置超时时间。网上有很多这样的例子,但实际情况是否是这样吗?

用ajax上传大文件反而还提示了:net::ERR_CONNECTION_RESET 的错误。

 

 

这个时候我们需要修改iis的web.config文件

新增如下:

顺便把设置超时的几个方法贴一下:
1.web.config设置
 system.web 节里添加如下配置项:
< httpRuntime executionTimeout="30"/>
以上时间单位是秒.
记得要把 web.config 的 debug 模式关闭:
< compilation defaultLanguage="c#" debug="false"/>

<httpRuntime maxRequestLength="" executionTimeout=""/>

一个是超时1800,一个是提交长度字节。

<configuration>
    <system.webServer>
<security>
   <requestFiltering>
<requestLimits maxAllowedContentLength="1048576000"></requestLimits>
   </requestFiltering>
</security>
  
    </system.webServer>
<system.web>
        <httpRuntime executionTimeout="1800" />
    </system.web>
</configuration>

图片 1

图片 2

当web.config保存完后就会立刻生效,这个时候发现我们的上传也可以正常使用了。

文章由爱资料原创本文地址:

2.单独某个页面的超时设置
Server.ScriptTimeout = 60;//单位:秒

 

3.WebService超时设置
在 WebService 的客户端代理程序(用 wsdl.exe 生成)里设置 Request 超时时间, 单位是毫秒:
protected override WebRequest GetWebRequest(Uri uri)
{
HttpWebRequest _request = (HttpWebRequest)base.GetWebRequest( uri );
_request.Timeout = 30*1000;//毫秒
return _request;
}

测试环境

 

IIS 7.5、.NET 3.5 sp1

 

测试页面UploadFile.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="UploadFile.aspx.cs" Inherits="UploadFile" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:FileUpload ID="FileUpload1" runat="server" />
        <asp:Button ID="Button1" runat="server" Text="Button" />
    </div>
    </form>
</body>
</html>

测试页面UploadFile.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class UploadFile : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (FileUpload1.FileContent != null)
        {
            FileUpload1.SaveAs(Server.MapPath("/Files/"+FileUpload1.FileName));
        }
    }
}

实际测试

 

1.上传小于4M的文件

 

选择2.7M的pdf文件上传

图片 3

上传提示成功

图片 4

 2. 上传大于4M的文件

图片 5

 选择上传4.3M的pdf文件

 

 

上传后报黄页

图片 6

3. 修改web.config文件,设置可上传文件大小限制

 

修改web.config,增大可上传文件的大小限制,增大执行时间限制

 

<httpRuntime maxRequestLength="2048000" executionTimeout="600"/>

 

 重新选择刚才4.3M的pdf文件,重新上传

图片 7

上传成功

 图片 8

4. 上传大于30M的的文件

 

 碰到这个问题的实际环境是我们使用了第三方的上传文件组件,通过js调用第三方的ActiveX控件上传文件,修改web.config后上传大于30M的文件的时候,报了如下错误

图片 9

查看windows系统日志,可以看到如下的日志错误,看到异常信息,我们可以猜测到是请求超长,但是我们设置了最大请求长度了啊,而且远远要大于30M。静下来想一想可能是IIS限制的,查询相关的IIS资料,发现果然是这样。

 

异常消息: 超过了最大请求长度。

在 System.Web.HttpRequest.GetEntireRawContent()
   在 System.Web.HttpRequest.GetMultipartContent()
   在 System.Web.HttpRequest.FillInFormCollection()
   在 System.Web.HttpRequest.EnsureForm()
   在 System.Web.HttpRequest.get_HasForm()
   在 System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull)
   在 System.Web.UI.Page.DeterminePostBackMode()
   在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

 

5. 修改IIS的配置

 

选中自己的站点,并双击“请求筛选”

图片 10

选择右侧的”编辑功能限制”

图片 11

在弹出的页面中,我们看到默认请求限制正是30M

图片 12

修改请求大小限制为合适的值即可,保存后重启站点即可。

                         

 

总结

 

1. Asp.NET作为微软的Web服务框架,其定义了web请求的大小限制和执行时间限制。同时其为上传文件提供了基础的框架,并为我们提供了UploadFile服务器控件,其最终也是通过Http将文件数据传输到服务器端,自然也受请求大小和执行时间的限制,只是一般的请求都打不到这个极限,往往是上传文件的时候才会触及这个阀值。

 

2. IIS作为windows平台上承载ASP.NET的法定服务器,按照正常逻辑来说,其也能统一设置发送到自己这里请求的大小限制。同时由于IIS只将针对特定类型的文件的请求路由到ASP.NET进行处理,像js、css和图片等请求是不受ASP.NET中请求大小的限制的,这也从一个侧面说明有必要再IIS中添加控制。

 

3. 请求的长度校验只有先通过IIS的限制后,才有可能路由到ASP.NET,只有最终通过ASP.NET的长度限制校验,才能正常的进行后续的管道处理步骤。

上一篇:管理员可能会禁止自动启动,IIS 搜索引擎优化 (SEO) 工具包是一个 IIS7 下一篇:没有了

更多阅读

系统默认是忽略web.config中超时设置的,为

软件 2020-04-25
我们在配置好了php.ini后超时和上传大小都设置了,但是使用浏览器上传大一点文件还是不能成...
查看全文

管理员可能会禁止自动启动,IIS 搜索引擎

软件 2020-04-25
使用 iisweb.vbs start 启动网站的方法,iisweb.vbsstart 应用到: Windows Server 2003, Windows Server 2003 R2, W...
查看全文

install 来进行安装,再来看看如何通过y

软件 2020-04-25
宝塔是基于python来开发的一款服务器管理工具,如果你是安装在centos上的话。就需要连接到终...
查看全文

友情链接: 网站地图

Copyright © 2015-2019 http://www.koi-bumi.com. 韦德体育有限公司 版权所有