Упражнение. Передача изображения в учетную запись хранения Azure
Давайте добавим код, чтобы передать изображение в учетную запись хранения Azure. В этом примере мы передадим следующее изображение в контейнер службы хранилища Azure.
Если вы работаете на локальном компьютере, щелкните его правой кнопкой мыши и сохраните его в той же папке, где есть приложение.
Если вы работаете в среде песочницы Microsoft Learn, выполните следующую команду в папке приложения, чтобы скачать образ в песочницу:
wget https://github.com/MicrosoftDocs/mslearn-connect-app-to-azure-storage/blob/main/images/docs-and-friends-selfie-stick.png?raw=true -O docs-and-friends-selfie-stick.png
В обоих случаях изображение должно иметь имя docs-and-friends-selfie-stick.png.
Передача изображения в Хранилище BLOB-объектов
Для работы с отдельными большими двоичными объектами в учетной записи хранения Azure используйте объект BlobClient
. Чтобы получить BlobClient
объект, вызовите GetBlobClient
метод в BlobContainerClient
объекте контейнера, в котором будет храниться большой двоичный объект. При вызове метода GetBlobClient
также можно указать имя для большого двоичного объекта в контейнере. В нашем примере имя большого двоичного объекта будет совпадать с именем нашего файла.
После получения объекта
BlobClient
можно вызвать методUpload
, чтобы передать файл в Хранилище BLOB-объектов Azure. Добавьте следующий код в файл Program.cs :string blobName = "docs-and-friends-selfie-stick"; string fileName = "docs-and-friends-selfie-stick.png"; BlobClient blobClient = container.GetBlobClient(blobName); blobClient.Upload(fileName, true);
Второй аргумент в методе
Upload
указывает, можно ли перезаписать имеющийся большой двоичный объект с таким же именем. По умолчанию это значение равноfalse
. В этом случае указывается значениеtrue
, чтобы программу можно было запускать многократно.
Вывод списка объектов в контейнере Хранилища BLOB-объектов Azure
Чтобы проверить, сработала ли программа, мы испробуем другую возможность пакета SDK для Azure Storage Blob для вывода списка объектов, хранящихся в контейнере в Хранилище BLOB-объектов. Это можно сделать, вызвав метод GetBlobs
в объекте BlobContainerClient
. Метод GetBlobs
возвращает страничный список объектов BlobItem
, содержащих данные о каждом большом двоичном объекте в контейнере.
Добавьте следующий код в программу после добавления кода, а затем сохраните файл:
var blobs = container.GetBlobs(); foreach (var blob in blobs) { Console.WriteLine($"{blob.Name} --> Created On: {blob.Properties.CreatedOn:yyyy-MM-dd HH:mm:ss} Size: {blob.Properties.ContentLength}"); }
Этот код вызывает
GetBlobs
в объектеBlobContainerClient
для контейнера photos. Затем он выполняет итерацию каждого большого двоичного объекта, выводя имя большого двоичного объекта, дату и время создания большого двоичного объекта, а также его размер. При запуске программы этот код должен находиться в отдельной строке для одного переданного изображения.Окончательный файл Program.cs должен выглядеть следующим образом (просмотрите его, если вы хотите проверить свою работу).
using System; using Microsoft.Extensions.Configuration; using System.IO; using Azure.Storage.Blobs; namespace PhotoSharingApp { class Program { static void Main(string[] args) { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json"); var configuration = builder.Build(); // Get a connection string to our Azure Storage account. var connectionString = configuration.GetConnectionString("StorageAccount"); // Get a reference to the container client object so you can create the "photos" container string containerName = "photos"; BlobContainerClient container = new BlobContainerClient(connectionString, containerName); container.CreateIfNotExists(); // Uploads the image to Blob storage. If a blb already exists with this name it will be overwritten string blobName = "docs-and-friends-selfie-stick"; string fileName = "docs-and-friends-selfie-stick.png"; BlobClient blobClient = container.GetBlobClient(blobName); blobClient.Upload(fileName, true); // List out all the blobs in the container var blobs = container.GetBlobs(); foreach (var blob in blobs) { Console.WriteLine($"{blob.Name} --> Created On: {blob.Properties.CreatedOn:yyyy-MM-dd HH:mm:ss} Size: {blob.Properties.ContentLength}"); } } } }
Выполнить приложение
Выполните сборку, запустите приложение, чтобы убедиться, что все работает, и передайте изображение в Хранилище BLOB-объектов Azure.
Примечание.
Убедитесь, что вы находитесь в каталоге PhotoSharingApp.
dotnet run
Поздравляем!
Вы узнали основные принципы работы с пакетом SDK для BLOB-объектов службы хранилища Azure и хранилищем BLOB-объектов Azure. При желании можно изучить дополнительные возможности, создав еще один контейнер, передав дополнительные изображения в учетную запись хранения или удалив изображение. Дополнительные сведения см. на странице клиентской библиотеки больших двоичных объектов службы хранилища Azure для .NET на сайте GitHub.
Передача изображения в Хранилище BLOB-объектов
Для работы с большими двоичными объектами в контейнере службы хранилища Azure используйте объект BlockBlobClient
. Объект BlockBlobClient
содержит методы для передачи, скачивания, вывода списка и удаления больших двоичных объектов в контейнере. Чтобы получить BlockBlobObject
, вызовите метод getBlockBlobClient
в объекте ContainerClient
. Затем с помощью метода uploadFile
можно передать изображение в службу хранилища Azure.
Добавьте этот код в файл программы index.js сразу после создания контейнера:
const filename = 'docs-and-friends-selfie-stick.png'; const blockBlobClient = containerClient.getBlockBlobClient(filename); blockBlobClient.uploadFile(filename);
Вывод списка объектов в контейнере Хранилища BLOB-объектов Azure
Чтобы убедиться в том, что код работает, вызовите метод
listBlobsFlat
для объектаContainerClient
в нашей программе. Добавьте этот код в файл index.js , а затем сохраните файл:let blobs = containerClient.listBlobsFlat(); let blob = await blobs.next(); while (!blob.done) { console.log(`${blob.value.name} --> Created: ${blob.value.properties.createdOn} Size: ${blob.value.properties.contentLength}`); blob = await blobs.next(); }
Этот код выводит все большие двоичные объекты в контейнере Хранилища BLOB-объектов Azure с датой создания и размером большого двоичного объекта. В нашей программе этот код должен выводить одну строку, представляющую один загруженный нами образ.
Окончательный файл должен выглядеть так:
#!/usr/bin/env node require('dotenv').config(); const { BlobServiceClient } = require("@azure/storage-blob"); const storageAccountConnectionString = process.env.AZURE_STORAGE_CONNECTION_STRING; const blobServiceClient = BlobServiceClient.fromConnectionString(storageAccountConnectionString); async function main() { // Create a container (folder) if it does not exist const containerName = 'photos'; const containerClient = blobServiceClient.getContainerClient(containerName); const containerExists = await containerClient.exists() if ( !containerExists) { const createContainerResponse = await containerClient.createIfNotExists(); console.log(`Create container ${containerName} successfully`, createContainerResponse.succeeded); } else { console.log(`Container ${containerName} already exists`); } // Upload the file const filename = 'docs-and-friends-selfie-stick.png'; const blockBlobClient = containerClient.getBlockBlobClient(filename); blockBlobClient.uploadFile(filename); // Get a list of all the blobs in the container let blobs = containerClient.listBlobsFlat(); let blob = await blobs.next(); while (!blob.done) { console.log(`${blob.value.name} --> Created: ${blob.value.properties.createdOn} Size: ${blob.value.properties.contentLength}`); blob = await blobs.next(); } } main();
Выполнить приложение
Выполните сборку приложения и запустите его.
Примечание.
Убедитесь, что вы находитесь в каталоге PhotoSharingApp.
node index.js
Совет
Если отобразится сообщение об ошибке применения ключевого слова
await
, убедитесь, что вы добавили ключевое словоasync
в определение функцииmain
согласно последнему шагу в приведенной выше инструкции.
Поздравляем!
Вы узнали основные принципы работы с клиентской библиотекой Azure Storage Blob для JavaScript и Хранилищем BLOB-объектов Azure. При желании можно изучить дополнительные возможности, создав еще один контейнер, передав дополнительные изображения в учетную запись хранения или удалив изображение. На странице служба хранилища Azure клиентской библиотеки BLOB-объектов для JavaScript npm.js есть много примеров использования библиотеки.