#c# #azure
Вопрос:
using Microsoft.Azure.Storage;
using Microsoft.Azure.Storage.Blob;
using Microsoft.Azure.Storage.DataMovement;
using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
namespace SampleDownload
{
class Program
{
static async Task Main(string[] args)
{
string accountName = "";
string accountKey = "";
string storageConnectionString = "DefaultEndpointsProtocol=https;AccountName=" accountName ";AccountKey=" accountKey;
CloudStorageAccount account = CloudStorageAccount.Parse(storageConnectionString);
await Download(account);
}
public static string GetSourcePath()
{
Console.WriteLine("nProvide path for source:");
string sourcePath = Console.ReadLine();
return sourcePath;
}
public static CloudBlockBlob GetBlob(CloudStorageAccount account)
{
CloudBlobClient blobClient = account.CreateCloudBlobClient();
Console.WriteLine("nProvide name of Blob container:");
string containerName = Console.ReadLine();
CloudBlobContainer container = blobClient.GetContainerReference(containerName);
container.CreateIfNotExistsAsync().Wait();
Console.WriteLine("nProvide name of new Blob:");
string blobName = Console.ReadLine();
CloudBlockBlob blob = container.GetBlockBlobReference(blobName);
return blob;
}
public static async Task Download(CloudStorageAccount account)
{
string path = @"D:test.zip";
Console.WriteLine("nTransfer started...");
DownloadOptions downloadOptions = new DownloadOptions();
TransferCheckpoint checkpoint = null;
SingleTransferContext transferContext = GetSingleTransferContext(checkpoint);
CloudBlockBlob sourceObject = GetBlob(account);
TransferManager.Configurations.ParallelOperations = 16;
await TransferManager.DownloadAsync(sourceObject, path, null, transferContext, CancellationToken.None);
Console.WriteLine("nTransfer operation complete.");
}
public static SingleTransferContext GetSingleTransferContext(TransferCheckpoint checkpoint)
{
SingleTransferContext context = new SingleTransferContext(checkpoint);
context.ProgressHandler = new Progress<TransferStatus>((progress) =>
{
Console.Write("rBytes transferred: {0}", progress.BytesTransferred);
});
return context;
}
}
}
Я пытаюсь загрузить большой файл из большого двоичного объекта azure, но с помощью Microsoft.Лазурь.Хранение.Пакет
DataMovement nuget в настоящее время я получаю различные ошибки, упомянутые ниже, при загрузке больших файлов
, он работает для небольших файлов, но не работает, когда размер файлов в GBs
- Перерыв
- Задача отменена
- Операция ввода-вывода была прервана либо из-за выхода из потока, либо из-за запроса приложения
Есть ли какой-нибудь способ решить эту проблему?
Комментарии:
1. задача var = TransferManager. DownloadAsync (…..); задача возврата; задача последующего вызова. Подождите(); перед выходом программы, например, после загрузки();
2. Спасибо за ответ, я пробовал использовать этот подход, но не работает
Ответ №1:
текущая проблема I исправлена для загрузки с помощью azcopy.exe предоставлено корпорацией Майкрософт
копия azcopy ‘https://mystorageaccount.blob.core.windows.net/mycontainer/myTextFile.txt’ ‘C:myDirectorymyTextFile.txt’
Комментарии:
1. Пожалуйста, добавьте дополнительные сведения, чтобы расширить свой ответ, например, ссылки на рабочий код или документацию.
2.docs.microsoft.com/en-us/azure/storage/common/….
3. вот документ Microsoft загрузите копию exe-файла и установите путь к большому двоичному объекту и локальной папке и выполните exe, он загрузит файл большого размера