[英]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.