在C#中上传文件时如果不修改默认文件的上传大小会提示Multipart body length limit 16384 exceeded这个错误提示表明你的请求中的Multipart body长度超过了16384字节的限制。这通常意味着你正在尝试发送一个太大的请求体,可能是因为包含了太多数据或者太大的文件。要解决这个问题,你可以尝试减少请求体的大小,或者使用其他方法来传输大量数据,比如分块上传或压缩数据。另外,你也可以查看服务端的配置,看是否可以调整Multipart body长度的限制。
在.net6中可以 修改Program.cs文件,添加以下代码
ps:以下代码要添加到var app = builder.Build();之前
builder.WebHost.UseKestrel(options =>
{options.Limits.MaxRequestLineSize = 10 * 1024 * 1024;//HTTP 请求行的最大允许大小。 默认为 8kboptions.Limits.MaxRequestBufferSize = 10 * 1024 * 1024;//请求缓冲区的最大大小。 默认为 1M//任何请求正文的最大允许大小(以字节为单位),默认 30,000,000 字节,大约为 28.6MBoptions.Limits.MaxRequestBodySize = 10 * 1024 * 1024;//限制请求长度});//上传文件限制
builder.Services.Configure<FormOptions>(x => {x.MultipartBodyLengthLimit = 10 * 1024 * 1024; // 10MB x.MemoryBufferThreshold = 1024 * 1024; // 1MB
});
然后在api方法上标注[DisableRequestSizeLimit]特性
在C#中,[DisableRequestSizeLimit]特性是用于禁用请求大小限制的。当应用程序使用ASP.NET Core处理请求时,可能会受到请求大小限制的影响,这可能会导致一些大型请求被拒绝或截断。使用[DisableRequestSizeLimit]特性可以禁用请求大小限制,允许应用程序处理大型请求而不受限制。这在处理大型文件上传或其他需要处理大型请求的情况下非常有用。
[HttpPost]
[DisableRequestSizeLimit]
public async Task<dynamic> UploadFileAsync()
{string fileName = "";string fullPath = "";string fileType = "";string Rotate = "0"; string Angle = "";try{if (Request.Form.Files.Count == 0) return Ok(new { ok = false, message = $"Upload Failed:没有文件." });var file = Request.Form.Files[0];if (file.Length < 1) return Ok(new { ok = false, message = $"Upload Failed:文件为空." });//代码逻辑}catch (Exception ex)
{Log.Error("Upload Failed.===" + "类型:" + fileType + " 文件名:" + fileName + " 失败原因:" + ex.Message );return Ok(new { ok = false, message = $"Upload Failed:{ex.Message}" });
}