我使用的是asp.net内核和C#编程。
我在控制器中有一个方法,可以从视图中的表单上传文件。
public async void UploadFile([FromForm(Name = "aFile")] IformFile aFile)
{
var filePath = Path.Combine(_webhost.WebRootPath, "Images", aFile.FileName);
if (aFile.Length > 0)
{
using (FileStream fs = System.IO.File.Create(filePath))
{
await aFile.CopyToAsync(fs);
}
}
}
155kb上传成功;但是,一个3.38MB的文件失败了:
System.ObjectDisposedException: 'Cannot access a closed file.'
我读到,这个问题可能与限制和流处理有关;然而,尽管添加了我看到的推荐的堆栈溢出修复程序,如:,问题仍然存在
[HttpPost, DisableRequestSizeLimit, RequestFormLimits(MultipartBodyLengthLimit = Int32.MaxValue, ValueLengthLimit = Int32.MaxValue, ValueCountLimit = Int32.MaxValue)]
欢迎任何建议:(谢谢!
由于使用async void
,您的跑步进入了比赛状态。由于void
返回类型,运行应用程序的服务器代码无法知道您的方法何时完成并立即处理请求
使用Task
作为UploadFile
方法的返回类型。
使用async
时,通常应避免使用void
返回类型
有关的更多信息,请参阅Microsoft的文章
此线程中记录了一个可能的修复程序:https://forums.asp.net/t/1397944.aspx?+无法+访问+关闭+文件。
具体而言,更改web配置中的"requestLengthDiskThreshold"的值。
<system.web>
<httpRuntime executionTimeout="90" maxRequestLength="20000" useFullyQualifiedRedirectUrl="false" requestLengthDiskThreshold="8192"/>
</system.web>
在System.ObjectDisposedException中提到了类似的修复程序:无法访问关闭的流