【发布时间】:2020-12-29 23:07:27
【问题描述】:
我正在尝试从连接到快速 Wifi 连接的手机上传 200 MB 的视频文件。我正在使用适用于 .NET 的 Azure Storage SDK v12,但以下代码在大约 30% 的上传进度后会自行重置。重置时,进度从 0 开始,不抛出异常。
await blobClient.UploadAsync(stream, progressHandler: new Progress<long>(progress =>
{
// show progress bar
}), cancellationToken: cancellationToken);
v12 支持上传大文件吗?如果我没记错的话,旧的 API 可以上传单个块。我的印象是上面的上传方法会隐式处理分块。
如何使用最新的 sdk 上传大文件?
附:我尝试以非常高的并发性和 1 MB 的传输大小传递 StorageTransferOptions,但没有任何区别。
编辑:等待了很长时间,我能够得到一个异常抛出。我看到多个任务因为
而被取消Cannot access a disposed object.
Object name: 'MobileAuthenticatedStream'.
at Mono.Net.Security.MobileAuthenticatedStream.StartOperation (Mono.Net.Security.MobileAuthenticatedStream+OperationType type, Mono.Net.Security.AsyncProtocolRequest asyncRequest, System.Threading.CancellationToken cancellationToken) [0x00245] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/System/Mono.Net.Security/MobileAuthenticatedStream.cs:410
at System.Net.Http.HttpConnection.WriteAsync (System.ReadOnlyMemory`1[T] source) [0x00118] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnection.cs:1008
at System.IO.Stream.CopyToAsyncInternal (System.IO.Stream destination, System.Int32 bufferSize, System.Threading.CancellationToken cancellationToken) [0x000e7] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corert/src/System.Private.CoreLib/shared/System/IO/Stream.cs:152
at Azure.Core.RequestContent+StreamContent.WriteToAsync (System.IO.Stream stream, System.Threading.CancellationToken cancellation) [0x00094] in <7b1dc95b0b4841539beb48023c1128d3>:0
at Azure.Core.Pipeline.HttpClientTransport+PipelineRequest+PipelineContentAdapter.SerializeToStreamAsync (System.IO.Stream stream, System.Net.TransportContext context) [0x0007c] in <7b1dc95b0b4841539beb48023c1128d3>:0
at System.Net.Http.HttpContent.CopyToAsyncCore (System.Threading.Tasks.ValueTask copyTask) [0x00022] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/HttpContent.cs:361
所以blobClient 中似乎内置了并行化,但它仍然失败了。此外,我不能使用https://www.nuget.org/packages/Microsoft.Azure.Storage.DataMovement,因为它不适用于Xamarin Forms。
【问题讨论】:
标签: azure xamarin azure-storage azure-blob-storage