我在Controller中收到Microsoft.AspNetCore.Http.IFormFile
类型的图像文件。
我在Azure Blob上传了这个文件。
在此之前我采取类似以下的流程
控制器
[HttpPost]
public async void ActionMethod(IFormFile img)
{
// some process
using(MemoryStream stream = new MemoryStream())
{
// (1)
img.CopyTo(stream); // (2)
stream.Seek(0, SeekOrigin.Begin);
// call await cloud block blob.UploadFromStreamAsync(stream);
}
// some process
}
当通过using
时,流是
流
CanRead: true
CanSeek: true
CanTimeout: false
CanWrite: true
Capacity: 0
Length: 0
Position: 0
ReadTimeout: 'stream.ReadTimeout' threw an exception of type 'System.InvalidOperationException'
WriteTimeout: 'stream.ReadTimeout' threw an exception of type 'System.InvalidOperationException'
在点(2)
之后和之后发生以下错误
System.ObjectDisposedException occurred
HResult=0x80131622
Message=Cannot access a disposed object
ObjectName: 'FileBufferingReadStream'
Source=Microsoft.AspNetCore.WebUtilities
StackTrace:
at Microsoft.AspNetCore.WebUtilities.FileBufferingReadStream.ThrowIfDisposed()
at Microsoft.AspNetCore.WebUtilities.FileBufferingReadStream.set_Position(Int64 value)
at Microsoft.AspNetCore.Http.Internal.ReferenceReadStream..ctor(Stream inner, Int64 offset, Int64 length)
at Microsoft.AspNetCore.Http.Internal.FormFile.OpenReadStream()
at Microsoft.AspNetCore.Http.Internal.FormFile.CopyTo(Stream target)
at AzureStorageManager.AzureStorageFileModules.<UploadFileAsync>d__11.MoveNext()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
真正的问题是,obove代码在某些情况下工作得很好但在某些情况下却没有(我无法理解这种情况。file
每次都是相同的。)
请帮帮我......
答案 0 :(得分:0)
我很难解决这个问题一天,在上传这个问题之后,我找到了一个解决方案。导致此问题的问题是Action方法的返回类型。如果返回类型不是Task<T>
,则会发生错误。所以我修改了我的行动方法,如
[HttpPost]
public async Task<int> ActionMethod(IFormFile img)
{
// same
return resultValue;
}
之后,错误没有显示出来。 其实我不知道为什么会这么做。所以,如果您知道,请告诉我并分享您的知识。感谢。