我嘗試將 2GB 檔案上傳到 Azure 存盤,但我的代碼失敗并且出現例外。對于較小的檔案,它作業正常。如何更改超時和檔案大小限制?我在 .NET Core 上使用 Azure.Storage.Blobs 版本 12.10.0。
我的代碼:
public FileRepository(AppSettings appSettings)
{
var blobServiceClient = new BlobServiceClient(appSettings.StorageConnectionString);
var containers = blobServiceClient.GetBlobContainers();
if (!containers.Any(x => x.Name == containerName))
{
blobServiceClient.CreateBlobContainer(containerName);
}
_blobContainerClient = blobServiceClient.GetBlobContainerClient(containerName);
}
public async Task<string> Upload(string fileName, Stream content)
{
var blobName = $"{Guid.NewGuid()}/{fileName}";
await _blobContainerClient.UploadBlobAsync(blobName, content);
return blobName;
}
我有例外:
System.AggregateException
HResult=0x80131500
Message=Retry failed after 6 tries. (The operation was canceled.) (The operation was canceled.) (The operation was canceled.) (The operation was canceled.) (The operation was canceled.) (The operation was canceled.)
Source=Azure.Core
StackTrace:
at Azure.Core.Pipeline.RetryPolicy.<ProcessAsync>d__11.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Azure.Core.Pipeline.HttpPipelineSynchronousPolicy.<ProcessAsync>d__1.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Azure.Core.Pipeline.HttpPipelineSynchronousPolicy.<ProcessAsync>d__1.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Azure.Core.Pipeline.HttpPipelineSynchronousPolicy.<ProcessAsync>d__1.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Azure.Storage.Blobs.BlobRestClient.BlockBlob.<UploadAsync>d__0.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Threading.Tasks.ValueTask`1.get_Result()
at Azure.Storage.Blobs.Specialized.BlockBlobClient.<UploadInternal>d__26.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
at Azure.Storage.Blobs.Specialized.BlockBlobClient.<>c__DisplayClass48_0.<<GetPartitionedUploaderBehaviors>b__0>d.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
at Azure.Storage.PartitionedUploader`2.<UploadInternal>d__19.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
at Azure.Storage.Blobs.BlobClient.<StagedUploadInternal>d__29.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
at Azure.Storage.Blobs.BlobContainerClient.<UploadBlobAsync>d__83.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at C:\...\FileRepository.<Upload>d__3.MoveNext() in C:\...\FileRepository.cs:line 38
Inner Exception 1:
TaskCanceledException: The operation was canceled.
Inner Exception 2:
HttpRequestException: Error while copying content to a stream.
Inner Exception 3:
IOException: Unable to read data from the transport connection: The I/O operation has been aborted because of either a thread exit or an application request..
Inner Exception 4:
SocketException: The I/O operation has been aborted because of either a thread exit or an application request.
uj5u.com熱心網友回復:
我認為使用BlobContainerClient.
您將需要使用類中的UploadAsync方法BlobClient并在BlobUploadOptions.TransferOptions.
如果您想對上傳程序進行更細粒度的控制,則需要在特定 Blob 客戶端中使用上傳方法。例如,如果您要上傳塊 blob,則可以使用BlockBlobClient.StageBlockAsync和BlockBlobClient.CommitBlockListAsync。
uj5u.com熱心網友回復:
您可以將檔案拆分 chunks/blocks 為客戶端。然后發送許多小塊 100 MB。
將檔案拆分為更小的塊,如果您使用的是像代碼這樣的Stream只會讀取一定數量的位元組并處理它們直到完成。
有關更多詳細資訊,請參閱實作檔案分塊、分塊上傳檔案 和放置 Blob。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/348971.html
標籤:天蓝色 .net核心 azure-blob-storage 天蓝色存储
