Скачивание большого двоичного объекта с помощью TypeScript
В этой статье показано, как скачать большой двоичный объект с помощью клиентской библиотеки службы хранилища Azure для JavaScript. Данные больших двоичных объектов можно скачивать в различные места назначения, включая локальный путь к файлу, поток или текстовую строку.
Предварительные требования
- В примерах в этой статье предполагается, что у вас уже есть проект, настроенный для работы с клиентской библиотекой Хранилище BLOB-объектов Azure для JavaScript. Дополнительные сведения о настройке проекта, включая установку пакета, импорт модулей и создание авторизованного клиентского объекта для работы с ресурсами данных, см. в статье Начало работы с Хранилище BLOB-объектов Azure и TypeScript.
- Механизм авторизации должен иметь разрешения на выполнение операции скачивания. Дополнительные сведения см. в руководстве по авторизации для следующей операции REST API:
Загрузка BLOB-объектов
Для скачивания большого двоичного объекта можно использовать любой из следующих способов:
- BlobClient.download
- BlobClient.downloadToBuffer (доступно только в среде выполнения Node.js)
- BlobClient.downloadToFile (доступно только в среде выполнения Node.js)
Загрузка по пути к файлу
В следующем примере выполняется скачивание большого двоичного объекта с помощью пути к файлу с помощью метода BlobClient.downloadToFile . Этот метод доступен только в среде выполнения Node.js:
async function downloadBlobToFile(
containerClient: ContainerClient,
blobName,
fileNameWithPath
): Promise<void> {
const blobClient = await containerClient.getBlobClient(blobName);
const downloadResult = await blobClient.downloadToFile(fileNameWithPath);
if (!downloadResult.errorCode) {
console.log(
`download of ${blobName} success ${downloadResult.blobCommittedBlockCount}`
);
}
}
Загрузка в виде потока
В следующем примере выполняется загрузка BLOB-объекта путем создания объекта потока Node.js с возможностью записи и последующей передачи в этот поток с помощью метода BlobClient.download.
async function downloadBlobAsStream(
containerClient: ContainerClient,
blobName,
writableStream
) {
const blobClient: BlobClient = await containerClient.getBlobClient(blobName);
const downloadResponse = await blobClient.download();
if (!downloadResponse.errorCode && downloadResponse?.readableStreamBody) {
downloadResponse.readableStreamBody.pipe(writableStream);
console.log(`download of ${blobName} succeeded`);
}
}
Скачивание в строку
В следующем примере Node.js скачивает большой двоичный объект в строку с помощью метода BlobClient.download . В Node.js данные больших двоичных объектов возвращаются readableStreamBody
в .
async function downloadBlobToString(
containerClient: ContainerClient,
blobName
): Promise<void> {
const blobClient: BlobClient = await containerClient.getBlobClient(blobName);
const downloadResponse: BlobDownloadResponseParsed =
await blobClient.download();
if (!downloadResponse.errorCode && downloadResponse.readableStreamBody) {
const downloaded = await streamToBuffer(
downloadResponse.readableStreamBody
);
if (downloaded) {
console.log('Downloaded blob content:', downloaded.toString());
}
}
}
async function streamToBuffer(readableStream) {
return new Promise((resolve, reject) => {
const chunks: Buffer[] = [];
readableStream.on('data', (data) => {
const content: Buffer = data instanceof Buffer ? data : Buffer.from(data);
chunks.push(content);
});
readableStream.on('end', () => {
resolve(Buffer.concat(chunks));
});
readableStream.on('error', reject);
});
}
Если вы работаете с JavaScript в браузере, данные BLOB-объектов возвращаются в объекте promise blobBody. Дополнительные сведения см. в примере использования браузеров на сайте BlobClient.download.
Ресурсы
Дополнительные сведения о скачивании BLOB-объектов с помощью клиентской библиотеки Хранилище BLOB-объектов Azure для JavaScript и TypeScript см. в следующих ресурсах.
Операции REST API
Пакет AZURE SDK для JavaScript и TypeScript содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API через знакомые парадигмы языка. Методы клиентской библиотеки для скачивания больших двоичных объектов используют следующую операцию REST API:
- Получение BLOB-объекта (REST API)
Примеры кода
Просмотрите примеры кода из этой статьи (GitHub):