我正在创建一个用于上传大文件的API端点。这些文件不应该在内存中缓冲(至少不是全部),而是直接流式传输到DB或磁盘。
有 微软官方文档关于流媒体上传到DB的内容。但它并没有说明如何以一种无缓冲的方式确保你不会读取大于限制的文件。(样本仓库中的代码有 一个通过将整个文件读入内存来检查的辅助程序这就违背了流式传输的初衷)。)
有没有一种(最好是简单的)方法让流媒体在读取的字节数超过某个指定限制时失败?也许还有其他方法来确保用户不能上传太大的文件?
这个问题 解释了在使用Kestrel时,如何在全局和每个请求中设置大小限制。
使用属性的每个请求。
[HttpPost]
[RequestSizeLimit(100_000_000)]
public IActionResult MyAction([FromBody] MyViewModel data)
{
每个请求使用 IHttpMaxRequestBodySizeFeature
:
app.Run(async context =>
{
context.Features.Get<IHttpMaxRequestBodySizeFeature>().MaxRequestBodySize = 100_000_000;
全球默认。
.UseKestrel(options =>
{
options.Limits.MaxRequestBodySize = null;