На самом деле, очень трудно найти работающее решение, потому что официальная документация устарела и там нет актуальных примеров.
Устаревший способ
Здесь можно найти устаревший пример работы с контейнерами BLOB-объектов: https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-dotnet?tabs=windows
В этом примере используется WindowsAzure.Storage
пакет NuGet, который был переименован в Microsoft.Azure.Storage.*
и разделен на отдельные пакеты.
Современное решение
В настоящее время я работаю над развертыванием статического SPA в хранилище BLOB-объектов Azure.У него есть очень приятная функция «Статический веб-сайт», которая обслуживает файлы.
Существует рабочий пример, который можно использовать для копирования всего содержимого из одного контейнера больших двоичных объектов в другой.Пожалуйста, рассмотрите это как подсказку (не готово к производству).
Все, что вам нужно, это:
- Иметь существующий контейнер BLOB-объектов.
- Установить
Microsoft.Azure.Storage.DataMovement
NuGetпакет. - Укажите правильную строку подключения.
Вот код:
// I left fully qualified names of the types to make example clear.
var connectionString = "Connection string from `Azure Portal > Storage account > Access Keys`";
var sourceContainerName = "<source>";
var destinationContainerName = "<destination>";
var storageAccount = Microsoft.Azure.Storage.CloudStorageAccount.Parse(connectionString);
var client = storageAccount.CreateCloudBlobClient();
var sourceContainer = client.GetContainerReference(sourceContainerName);
var destinationContainer = client.GetContainerReference(destinationContainerName);
// Create destination container if needed
await destinationContainer.CreateIfNotExistsAsync();
var sourceBlobDir = sourceContainer.GetDirectoryReference(""); // Root directory
var destBlobDir = destinationContainer.GetDirectoryReference("");
// Use UploadOptions to set ContentType of destination CloudBlob
var options = new Microsoft.Azure.Storage.DataMovement.CopyDirectoryOptions
{
Recursive = true,
};
var context = new Microsoft.Azure.Storage.DataMovement.DirectoryTransferContext();
// Perform the copy
var transferStatus = await Microsoft.Azure.Storage.DataMovement.TransferManager
.CopyDirectoryAsync(sourceBlobDir, destBlobDir, true, options, context);