我一直在寻找一种方法来上传一个大文件到我的服务器。我的表单工程小文件x〈30 MB。这是我的表单:
<div class="card">
<div class="card-header">
<center><b>Dodaj obrazek</b></center>
</div>
<div class="card-body">
<form method="post" enctype="multipart/form-data">
<div class="mb-3">
<input type="file" asp-for="Gallery.Upload" class="form-control" />
</div>
<button class="btn btn-success">Upload</button>
</form>
</div>
</div>
我正在使用IFormFile
[NotMapped]
public IFormFile Upload { get; set; }
我已经尝试了很多场景,比如在SiteModel或Method之前声明RequestFormLimit:
[RequestFormLimits(MultipartBodyLengthLimit = 104857600)]
public class SiteModel : PageModel
[RequestFormLimits(MultipartBodyLengthLimit = 104857600)]
public async Task OnGetAsync()
但还是一无所获。
//UPDATE我已将此添加到我的Program.cs中
builder.Services.Configure<FormOptions>(conf =>
{
conf.ValueLengthLimit = int.MaxValue;
conf.MultipartBodyLengthLimit = int.MaxValue;
conf.MemoryBufferThreshold = int.MaxValue;
});
并且在SiteModel之前
[DisableRequestSizeLimit]
而现在我只能上传最多100 MB,但我想让它更大,像4GB限制每一次上传。
如何更改限额大小?
3条答案
按热度按时间bqjvbblv1#
在将一个旧的应用程序更新到.net6之后,我们遇到了同样的问题,并且也尝试了您所尝试过的所有方法。直到将web.config重新添加到项目中,才允许大规模上传成功。以下是所需的全部操作:
希望能有所帮助。
n8ghc7c12#
对于.Net Core 6和Razor Pages,我们在Microsoft文档中提供了一些提示(https://learn.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads?view=aspnetcore-6.0)
在Program.cs中,他们将文件限制作为一个选项包括在执行上载的页中:
在文档中,他们只是添加了MultipartHeadersLengthLimit,但我还添加了其他限制,您也会有兴趣更改这些限制。
在页面模型中包括:
请注意,要遵循他们的示例,如果您尝试上载不同的扩展名,则必须使用正确的文件签名更新FileHelper.cs。否则,该页将返回无效状态。
y1aodyip3#
这是一个安全+优化特性。默认情况下,每个有效负载可以移动的内容(数量和质量)有一个限制。对于this article的.net核心,它大约是25 MB。
根据您希望的托管方式,您可以更改此限制以适合您的情况。
您可以将web.config文件添加到项目中,并添加下面的代码。
您也可以遵循microsoft documentation(这是针对MVC的,但它很好用)。
这就足够了吗?不。由于TCP/IP和IEEE标准的网络结构,如果你没有一个开放的管道,传输大文件可以是一个苦差事没有良好的网络。它很容易中断。
我会建议你也尝试工作的压缩文件。这个教程压缩文件到一个Zip。
如果你正在处理视频,但是,我会建议反对压缩到Zip或Rar.这是因为视频已经非常压缩.你可以然而“转置&变换”,这意味着你可以从一个Avi到一个Mkv的转换.有时,这个过程可能会丢失数据和质量.