【发布时间】:2018-10-07 20:05:35
【问题描述】:
我收到一个带有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()
真正的问题是上述代码在某些情况下运行良好,但在某些情况下却不行(我无法理解这种情况。file 每次都相同)。
请帮帮我……
【问题讨论】:
-
你可以在
UploadIFormFile函数github.com/neville-nazerane/netcore.azure.blob/blob/master/…中试试这段代码 -
@NevilleNazerane 谢谢!我会在重构时参考它!
标签: c# asp.net-core azure-storage azure-blob-storage