如果Fileupload大小超过5 MB,则不显示错误消息

时间:2016-04-06 05:21:49

标签: c# .net asp.net-mvc localhost

我有一个文件上传页面,按钮点击我调用一个方法,我将最大大小定义为5 MB。但是当我上传更多内容时,不会显示大小错误消息。这是我的代码:

public ActionResult document(HttpPostedFileBase file, Document model)
{
    tbldocument doc = new tbldocument();
    //Document model = new Document();
    doc.DocumentName = model.documentname;

    if (ModelState.IsValid)
    {
        if (file == null)
        {
            ModelState.AddModelError("File", "Please Upload Your file");
        }
        else if (file.ContentLength > 0)
        {
            int MaxContentLength = 1024 * 1024 * 10; //10 MB
            string[] AllowedFileExtensions = new string[] { ".jpg", ".gif", ".png", ".pdf", ".docx", ".doc", ".xml", ".odt", ".xlsx", ".ppt" };

            if (!AllowedFileExtensions.Contains(file.FileName.Substring(file.FileName.LastIndexOf('.'))))
            {
                ModelState.AddModelError("File", "Please file of type: " + string.Join(", ", AllowedFileExtensions));
            }

            else if (file.ContentLength > MaxContentLength)
            {
                ModelState.AddModelError("File", "Your file is too large, maximum allowed size is: " + MaxContentLength + " MB");
            }
            else
            {
                var fileName = Path.GetFileName(file.FileName);
                var path = Server.MapPath("~/App_Data/uploads/documents/" + model.projectid + "");
                //var pathFile = path + fileName;
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                var pathWithfileName = Path.Combine(path, fileName);
                file.SaveAs(pathWithfileName);
                ModelState.Clear();
                tbldocument objdb = new tbldocument();
                objdb.DocumentName = model.documentname;
                objdb.ProjectId = model.projectid;
                objdb.Path = model.path;
                objdb.Path = Convert.ToString(pathWithfileName);
                // objdb.FileName = file.FileName;
                //objdb.FileName = file.FileName;
                objdoc.upload(objdb);
                //" + projectid + "
                ViewBag.Message = "File uploaded successfully. File path : ~/Upload/" + fileName;
            }
        }
    }
    return RedirectToAction("ProjectTask", "TblTask");
}

这是快照enter image description here。它不会向用户显示该文件必须小于5 MB的消息,而是抛出如下错误:

Enter image description here

2 个答案:

答案 0 :(得分:0)

由于上传存储在IIS RAM中直到文件完全上传,因此在调用方法之前,IIS会在文件过大时进行barf。如果您想要上传大文件,请将这样的内容添加到web.config:

<system.webServer>
    <security>
        <requestFiltering>
            <requestLimits maxAllowedContentLength="104857600" /><!-- bytes -->
        </requestFiltering>
    </security>
</system.webServer>

如果您想更优雅地处理这些“未处理”错误,请在global.asax.cs中添加Application_Error方法。

答案 1 :(得分:0)

您可能在ASP.NET中遇到默认请求限制:4MB(docs)。

来自:http://www.strathweb.com/2012/09/dealing-with-large-files-in-asp-net-web-api/

  

此外,ASP.NET运行时有自己的文件大小限制(这是   IIS 6也使用,所以如果你使用那个版本,那是唯一的地方   你需要修改) - 位于httpRuntime元素下   web.config中。

     

默认设置为4MB(4096kB)。你也需要改变它   (它以kB为单位设置,而不是前一个字节!):

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

值得记住的是,在两个配置元素中,   无论哪个请求长度限制较小,都将优先。

此外,鉴于您在IIS 7或更高版本中托管应用程序,您还应记得调整maxAllowedContentLength(此设置由IIS使用)。默认值为30000000字节(~28.6 MB)(docs)。

我可以鼓励您查看:http://www.strathweb.com/2012/09/dealing-with-large-files-in-asp-net-web-api/ - 该文章介绍了如何在ASP.NET中使用大型文件。