对于较小的文件(即 30MB 左右)我没有问题。然而,一旦我尝试将 89MB 文件上传到我的 API 控制器,它就会抛出
(Request Entity Too Large)
错误:
来自我的前端:
POST http://localhost:21971/api/import/MediaUpload?sessionID=***&pid=*** net::ERR_FAILED 413 (Request Entity Too Large)
我的后端 .Net 8 API 项目包含一个 import.controller.cs:
[HttpPost]
[Route("MediaUpload")]
public async Task<IActionResult> MediaUpload([FromQuery] string sessionId, [FromQuery] string pid, [FromForm] ImportMediaUploadModel formData)
{
IFormCollection form;
try
{
form = await Request.ReadFormAsync();
form.Keys.ToList().ForEach(key =>
{
if (key.Equals("MediaInfo", StringComparison.InvariantCultureIgnoreCase))
{
formData.MediaInfo = JsonConvert.DeserializeObject<List<MediaInfo>>(form[key]);
}
});
}
for (var i = 0; i < formData.Files?.Count; i++)
{
UploadFile(formData.Files[i]);
}
// ...
return Ok();
}
private async void UploadFile(IFormFile file)
{
var thisFileName = file.FileName.Trim('\"');
string? localPath = config[key: "ImportImageFolderPath"];
string fullPath = Path.Combine(localPath, thisFileName);
FileInfo fileInfo = new(fullPath);
using var stream = System.IO.File.Create(fullPath);
await file.CopyToAsync(stream);
}
我在 QA 环境中上传时遇到同样的错误(而不仅仅是在本地主机)。
我正在阅读一些文档,例如这样的,https://learn.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads?view=aspnetcore-8.0,但我缺乏一些专业知识最新 .Net 级别的知识。
提前感谢您提供有关如何处理 .Net 8 中文件上传限制的任何建议。
您可以使用
[RequestSizeLimit(500*1024*1024)]
属性来处理高达 500 MB 的请求。
[HttpPost]
[Route("MediaUpload")]
[RequestSizeLimit(500*1024*1024)]
public async Task<IActionResult> MediaUpload([FromQuery] string sessionId, [FromQuery] string pid, [FromForm] ImportMediaUploadModel formData)
{
或者您可以在 Program.cs 中进行如下配置:
builder.Services.Configure<FormOptions>(x => {
x.ValueCountLimit = int.MaxValue;
});