У меня есть сценарий для загрузки резервных копий баз данных в хранилище BLOB-объектов Azure с помощью службы Windows.Он работает для диапазона файлов bak между 300-500 МБ, но если размер превышает 700 МБ до 1 ГБ или более.Это заняло больше часа, а затем выдало исключение.
Пожалуйста, проверьте код ниже, дайте мне знать, что я делаю неправильно и каков эффективный способ загрузки файлов большого размера в хранилище BLOB-объектов.Я попробовал эти два метода.
public static void UploadFile(AzureOperationHelper azureOperationHelper)
{
CloudBlobContainer blobContainer = CreateCloudBlobContainer(tenantId, applicationId,
clientSecret, azureOperationHelper.storageAccountName, azureOperationHelper.containerName,
azureOperationHelper.storageEndPoint);
blobContainer.CreateIfNotExists();
var writeOptions = new BlobRequestOptions()
{
SingleBlobUploadThresholdInBytes = 50 * 1024 * 1024,//maximum for 64MB,32MB by default
ParallelOperationThreadCount = 12,
};
CloudBlockBlob blob = blobContainer.GetBlockBlobReference(azureOperationHelper.blobName);
//blob.UploadFromFile(azureOperationHelper.srcPath);
blob.UploadFromFile(azureOperationHelper.srcPath, options: writeOptions);
}
public static void UploadFileStream(AzureOperationHelper azureOperationHelper)
{
CloudBlobContainer blobContainer = CreateCloudBlobContainer(tenantId, applicationId,
clientSecret, azureOperationHelper.storageAccountName, azureOperationHelper.containerName,
azureOperationHelper.storageEndPoint);
blobContainer.CreateIfNotExists();
CloudBlockBlob blob = blobContainer.GetBlockBlobReference(azureOperationHelper.blobName);
//byte[] contents = File.ReadAllBytes(azureOperationHelper.srcPath);
//var writeOptions = new BlobRequestOptions()
//{
// SingleBlobUploadThresholdInBytes = 50 * 1024 * 1024,//maximum for 64MB,32MB by default
// ParallelOperationThreadCount = 12,
//};
//blob.UploadFromByteArray(contents, 0, contents.Length, AccessCondition.GenerateIfNotExistsCondition(), options: writeOptions);
blob.StreamWriteSizeInBytes = 100 * 1024 * 1024; //100 MB
blob.UploadFromFile(string.Format(azureOperationHelper.srcPath));
//using (var fs = new FileStream(azureOperationHelper.srcPath, FileMode.Open))
//{
// blob.UploadFromStream(fs);
//}
}
Ниже приведены исключения, которые я получил.
Microsoft.WindowsAzure.Storage.StorageException: удаленный сервер возвратил ошибку: (403)Запрещено.---> System.Net.WebException: удаленный сервер возвратил ошибку: (403) Запрещено.в Microsoft.WindowsAzure.Storage.Shared.Protocol.HttpResponseParsers.ProcessExpectedStatusCodeNoException [T] (HttpStatusCode ОжидаемыйStatusCode, HttpStatusCode actualStatusCode, T retVal, StorageCommandBase`1 * 101 * * 101 * * 101 1012, исключение 1011) исключение 1011, исключение: 1011, исключение 1011, исключение: 1011, исключение: 1011, исключение: 1011, исключение: 1010 исключений, исключений: 1011, исключая исключительную ситуацию, 1011 1011, исключение: 1011, исключая исключительную ситуацию - 1011 * 1012, исключение: 1011 * 1011, исключение: 1011, исключение: 1011, исключ.Microsoft.WindowsAzure.Storage.StorageException: клиент не смог завершить операцию в течение указанного времени ожидания.---> System.TimeoutException: клиент не смог завершить операцию в течение указанного времени ожидания.