我正在尝试创建一个网络应用程序,可以将视频文件上传到云端,然后播放它们。我在上传相对较大的视频文件时遇到问题。当我上传一个相对较小的视频文件时,一切都会正常工作。
我对此进行了广泛的研究,但似乎没有任何效果。为了演示目的,我在一个小例子中重新创建了我的问题
这是.cshtml:
<form method="post" enctype="multipart/form-data">
<input type="file" asp-for="UploadedFile" />
<input asp-page-handler="Upload" class="btn" type="submit" value="Upload">
</form>
这是.cshtml.cs
[RequestFormLimits(MultipartBodyLengthLimit = 104857600)]
public class TrialUploadModel : PageModel
{
[BindProperty]
public IFormFile UploadedFile { get; set; }
public void OnGet()
{
}
public async Task<IActionResult> OnPostAsync()
{
Console.Write("Success!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
using (var stream = UploadedFile.OpenReadStream())
{
Console.Write(stream.Length);
}
return Page();
}
}
如您所见,我已将 [RequestFormLimits(MultipartBodyLengthLimit = 104857600)] 添加到页面,我还创建了一个 web.config 并在那里扩展了限制大小,但我仍然遇到同样的问题。
我还在 StartUp.cs 中增加了 FormOptions 但仍然没有运气:
services.Configure<FormOptions>(x =>
{
x.ValueLengthLimit = int.MaxValue;
x.MultipartBodyLengthLimit = int.MaxValue;
x.MultipartHeadersLengthLimit = int.MaxValue;
});
services.Configure<KestrelServerOptions>(options =>
{
options.Limits.MaxRequestBodySize = int.MaxValue;
});
对于.Net Core 6和Razor Pages,我们在Microsoft文档中提供了一些提示(https://learn.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads?view=aspnetcore-6.0 )
在 Program.cs 中,他们将文件限制作为针对执行上传的页面的选项:
// Add services to the container.
builder.Services.AddRazorPages(options =>
{
options.Conventions
.AddPageApplicationModelConvention("/[your cshtml page name with no extension]",
model =>
{
model.Filters.Add(
new RequestFormLimitsAttribute()
{
// Set the limit to 256 MB
ValueLengthLimit = 268435456,
MultipartBodyLengthLimit = 268435456,
MultipartHeadersLengthLimit = 268435456
});
// model.Filters.Add(
// new RequestSizeLimitAttribute(268435456));
});
});
在文档中,他们只是添加了 MultipartHeadersLengthLimit,但我还包含了您也有兴趣更改的其他限制。
在您的页面模型中包括:
[DisableRequestSizeLimit]
[RequestFormLimits(MultipartBodyLengthLimit = 268435456)]
public class YourPageNameModel : PageModel
{ ...}
请注意,要遵循他们的示例,如果您尝试上传不同的扩展名,则必须使用正确的文件签名更新 FileHelper.cs。否则,页面将返回无效状态。