我有一个行动方法:
[RequestSizeLimit(int.MaxValue)]
[RequestFormLimits(ValueLengthLimit = int.MaxValue, MultipartBodyLengthLimit = int.MaxValue)]
[HttpPost]
[MultipartFormData]
[DisableFormValueModelBinding]
public async Task<PartialViewResult> Upload(/*[FromQuery] string path*/)
{
...
}
和部分视图:
<form id="frmUpload" method="post" data-ajax="true" data-ajax-method="post" data-ajax-url="@(Url.Action("Upload", "Home"))"
data-ajax-mode="replace" data-ajax-update="#divUpload" data-ajax-loading="#loading"
data-ajax-failure="failed" enctype="multipart/form-data">
<div class="row mt-2">
<div class="col-md-4">
<input type="file" name="battlePlans" multiple>
</div>
<div>
<input type="submit" value="Submit" class="btn btn-primary" />
</div>
</div>
</form>
@if (ViewBag.Success != null)
{
<h2 class="alert @(ViewBag.Success ? "alert-success" : "alert-danger")" id="frmMessage">@ViewBag.Message</h2>
}
和Index.cshtml视图:
<div id="divUpload">
<partial name="IndexPartials/Upload.cshtml" model="null" view-data="@ViewData" />
</div>
@section Scripts {
<script>
$(function () {
$.ajax({
timeout: 2 * 60 * 60 * 1000, // 2 hour
maxChunkSize: 1000000 // 1 MB
});
});
</script>
}
程序.cs:
builder.Services.Configure<FormOptions>(options =>
{
options.MultipartBodyLengthLimit = int.MaxValue;
options.ValueLengthLimit = int.MaxValue;
});
当我上传一些小文件时,文件正在上传。但为了测试,我上传了一个 580MB 的文件,我等待了很长时间,但在 IIS Express 和 VS 2022 中文件上传未完成。(此外,在运行期间,我在循环中放置了一个断点,读取和写入它命中的字节,然后我删除了断点并单击继续以便继续执行)。
无论我等多久,文件都没有完全复制,只有我上传了一些兆字节,如何纠正这个问题?
尝试添加一个web.config并添加以下配置部分,更新此限制以支持最大580MB的文件:
web.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<!-- Removed other configuration -->
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="999217728"/>
</requestFiltering>
</security>
</system.webServer>
</configuration>