我有一个文件上传页面,按钮点击我调用一个方法,我将最大大小定义为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");
}
答案 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中使用大型文件。