C#中服务器端文件大小限制

3

我目前正在MVC4中上传文件,但在我的控制器中,我试图将文件大小限制为最大4MB,但出现了以下警告:

与整数常量的比较是无用的

使用 Haacks的示例。

[HttpPost]
public ActionResult Upload(HttpPostedFileBase file)
{
if (file.ContentLength > 0)
{
if (file.ContentLength < 4000000000 )
{
   var fileName = System.IO.Path.GetFileName(file.FileName);
   var path = System.IO.Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
   file.SaveAs(path);
 }

当我运行代码时,我遇到了错误。
Maximum request length exceeded.

由于file.ContentLength是一个我无法控制的int,我不知道如何解决这个问题。有人能帮我解决一下如何在服务器端限制文件大小吗? 编辑 对于那些想指出40000000004GB的人,你们是正确的。但即使我将其替换为4000000,我的操作也会成功完成,但不会保存文件,因为我的If()未满足,即file.ContentLength < 4000000返回false。 编辑 这不是重复的问题,我想将文件大小限制为某个特定的限制,而不是忽略IIS中的文件大小限制。

如果file.ContentLength是一个32位有符号整数,那么你可以将其与20亿进行比较。这可以解释你收到的特定消息。 - Meredith Poor
可能是重复的问题:有没有办法忽略最大请求长度限制2GB文件上传? - Erik Philips
我不知道你是否试图上传一个确切的4MB文件,但请记住,4兆字节=4,194,304字节。在上传请求期间,你是否逐行检查了代码?如果其中一个if语句失败,你是否有错误消息? - Tommy
@Tommy,即使文件是100kb的文本文件,IF(file.ContentLength <4000000)也无法满足要求。代码执行时没有任何堆栈错误,但不保存文件。 - Flood Gravemind
报告的file.contentLength()是什么?您是否附加了调试器以检查代码中实际报告的值? - Tommy
2个回答

3

请在您的web.config文件中设置以下值:

<httpRuntime maxRequestLength="4096"/>

该设置用于限制上传文件的大小,最大可设置为4MB。

3
注意:请求长度不仅仅是文件大小,还包括表单字段等所有请求数据。我遇到了一个问题,当我回传约1200个字段时(不要问我为什么),出现了问题。 - The Muffin Man
@Nick,正是我所想的,仍然+1。 - Flood Gravemind

0

对于那些正在使用 IFormFile 的人,可以使用以下方法。

[HttpPost]
public ActionResult Upload(IFormFile file)
{
      int fourMB = 4 * 1024 * 1024;
      var fileSize = file.Length;//Get the file length in bytes
      if (fileSize / 1048576.0 > fourMB) //1048576 (i.e. 1024 * 1024):
        {
          var fileName = System.IO.Path.GetFileName(file.FileName);
          var path = System.IO.Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
          file.SaveAs(path);
        }
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接