"超出最大请求长度"设置maxAllowedContentLength后甚至出错

时间:2015-06-13 03:48:04

标签: c# asp.net visual-studio-2010 iis file-upload

我使用IIS 6.2并且我的解决方案有一个file-upload控件并试图上传一堆images但我收到此错误。我搜索了互联网并得到了很多解决方案,但没有一个有效。

  

我申请了maxAllowedContentLength =" 1073741824"但仍然会得到同样的错误。

protected void lnkbtnUpload_Click(object sender, EventArgs e)
{
    try
    {
        foreach (HttpPostedFile objHttpPostedFile in fuUpload.PostedFiles)
        {
            string FileName = objHttpPostedFile.FileName;
            string FileType = objHttpPostedFile.ContentType;
            Stream fs = objHttpPostedFile.InputStream;
            BinaryReader br = new BinaryReader(fs);
            Byte[] bytes = br.ReadBytes((Int32)fs.Length);

            using (SqlConnection con = new SqlConnection(ConnectionString))
            {
                con.Open();
                SqlCommand cmd = new SqlCommand("uspInsertImage", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("Filename", SqlDbType.NVarChar).Value = FileName;
                cmd.Parameters.Add("FileType", SqlDbType.NVarChar).Value = FileType;
                cmd.Parameters.Add("ImageStream", SqlDbType.VarBinary).Value = bytes;
                cmd.Parameters.Add("DateCreated", SqlDbType.DateTime).Value = DateTime.Now;
                int i = cmd.ExecuteNonQuery();
                con.Close();
            }

            BindImage();
        }
    }
    catch(Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

我的Web.Config文件

<system.web>
  <compilation debug="true" targetFramework="4.5" />
  <httpRuntime targetFramework="4.5" />
</system.web>    
<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="4073741824" />
    </requestFiltering>
  </security>

2 个答案:

答案 0 :(得分:1)

自IIS 7.0以来已添加了requestLimits设置。

对于IIS 6,您需要使用:

<system.web>
    <httpRuntime maxRequestLength="1048576" executionTimeout="100000" />
</system.web>

这允许文件上传1 GB,它将在100,000秒或27.8小时后超时。

答案 1 :(得分:0)

最大请求限制是为了保护您的网站免受拒绝服务攻击,因此最好扩展特定目录的文件大小限制,而不是整个应用程序 你可以用

做到
<location path="Upload">
<system.web>
    <httpRuntime executionTimeout="110" maxRequestLength="1048576" />
</system.web>

并且您可以使用以下代码向用户显示警告,当他们尝试上传高于最大限额的内容时,添加警告将改善您的网站用户体验

    System.Configuration.Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
HttpRuntimeSection section = config.GetSection("system.web/httpRuntime") as HttpRuntimeSection;
double maxFileSize = Math.Round(section.MaxRequestLength / 1024.0, 1);
FileSizeLimit.Text = string.Format("Make sure your file is under {0:0.#} MB.", maxFileSize);

注意:maxRequestLength以千字节为单位,这就是此配置示例中值不同的原因。 (相当于1 GB。)