繁体   English   中英

ASP.NET Core MVC:上传的文件很大时,IFormFile 返回 Null

[英]ASP.NET Core MVC: IFormFile return Null when uploaded file is large

我有一个用 ASP.NET Core MVC 实现的 C# 课程的学生项目。 它的文件上传网站,较小的文件可以完美上传(65 mb,或多或少),但大文件,例如 600 mb 电影, IFormFile为空。 我使用.NET 6.0。

上传逻辑在 MovieController -> https://dpaste.org/PBgks (变量“file”为空)中实现,CSHTML 视图上传文件在此处 -> https://dpaste.org/25mOS

我的项目通过了,但我想一劳永逸地解决这个错误

PS:如果我忘记提及解决此问题的一些关键信息,请随时提醒我。

对不起我生疏的英语。

更新#1:在对较大的文件重复上传过程后,它会神奇地上传(我不得不点击上传按钮十几次)。 这真的很奇怪。

尝试找到一种方法来更改maxRequestLength属性。 虽然我不认为默认值只有 4MB 或您之前已更改过它的问题。

您是否尝试应用RequestFormLimits属性并设置MultipartBodyLengthLimit ,如下所示?

[RequestFormLimits(MultipartBodyLengthLimit = 6104857600)] 
public async Task<IActionResult> UploadFile(IFormFile file, int id)
{
    // your core here...
}

此外,如果您在 IIS 下运行,请在web.config中设置maxAllowedContentLength参数。 对于 ASP.NET Core MVC 项目,此文件不会自动添加,但 IIS 仍然需要它并且应该手动添加。

<system.webServer>
    <security>
      <requestFiltering>
         <requestLimits maxAllowedContentLength="4147483648" /> 
      </requestFiltering>
    </security>
    ...
</system.webServer>

通过startup.cs文件配置FormsOptions参数:

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<FormOptions>(o =>
    {
        o.ValueLengthLimit = int.MaxValue;
        o.MultipartBodyLengthLimit = long.MaxValue; 
    });

    services.AddControllersWithViews();
}

未提供_storageServices.UploadFile的代码。 虽然我认为你编码:

public async Task<IActionResult> UploadFile(IFormFile file, int id)
    {
        var viewMod = new UploadViewModel();
        viewMod.Id = id;
      
        try
        {
            await _storageServices.UploadFile(file, id).ConfigureAwait(false);
            ViewBag.Message = "File Uploaded Successfully!!";               
            return View(viewMod);
        }
        catch
        {
            ViewBag.Message = "File upload failed!!";
            return View(viewMod);
        }
    }

看起来你只是将它传递给服务,然后更新数据库。

如果您打算将其上传到某个dir ,请使用以下代码:

try
{   
    //this will upload the file to directory
    using (var stream = new FileStream("upload path", FileMode.Create))
    {
        await file.CopyToAsync(stream);
    }

    //your code for entry of file in database
    await _storageServices.UploadFile(file, id).ConfigureAwait(false);
    ViewBag.Message = "File Uploaded Successfully!!";               
    return View(viewMod);
}
catch
{
    ViewBag.Message = "File upload failed!!";
    return View(viewMod);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM