Отправка большого двоичного объекта с помощью TypeScript
В этой статье показано, как отправить большой двоичный объект с помощью клиентской библиотеки службы хранилища Azure для JavaScript. Вы можете отправлять данные в блочный BLOB-объект из пути к файлу, потока, буфера или текстовой строки. Вы также можете отправить большие двоичные объекты с тегами индекса.
Предварительные требования
- В примерах в этой статье предполагается, что у вас уже есть проект, настроенный для работы с клиентской библиотекой Хранилище BLOB-объектов Azure для JavaScript. Дополнительные сведения о настройке проекта, включая установку пакета, импорт модулей и создание авторизованного клиентского объекта для работы с ресурсами данных, см. в статье Начало работы с Хранилище BLOB-объектов Azure и TypeScript.
- Механизм авторизации должен иметь разрешения на выполнение операции отправки. Дополнительные сведения см. в руководстве по авторизации для следующих операций REST API:
Отправка данных в блочный BLOB-объект
Для отправки данных в блочный BLOB-объект можно использовать любой из следующих методов:
- upload (метод непараллелевой отправки)
- uploadData
- uploadFile (доступен только в среде выполнения Node.js)
- uploadStream (доступно только в среде выполнения Node.js)
Каждый из этих методов можно вызвать с помощью объекта BlockBlobClient .
Отправка блочного BLOB-объекта из пути к файлу
В следующем примере передается блочный BLOB-объект из локального пути к файлу:
async function uploadBlobFromLocalPath(
containerClient: ContainerClient,
blobName: string,
localFilePath: string
): Promise<void> {
// Create blob client from container client
const blockBlobClient: BlockBlobClient = containerClient.getBlockBlobClient(blobName);
await blockBlobClient.uploadFile(localFilePath);
}
Отправка блочного BLOB-объекта из потока
В следующем примере блочный BLOB-объект передается путем создания удобочитаемого потока и передачи потока:
async function uploadBlobFromReadStream(
containerClient: ContainerClient,
blobName: string,
readStream: fs.ReadStream
): Promise<void> {
// Create blob client from container client
const blockBlobClient: BlockBlobClient = containerClient.getBlockBlobClient(blobName);
await blockBlobClient.uploadStream(readStream);
}
Отправка блочного BLOB-объекта из буфера
В следующем примере передается блочный BLOB-объект из буфера Node.js:
async function uploadBlobFromBuffer(
containerClient: ContainerClient, blobName: string, buffer: Buffer
): Promise<void> {
// Create blob client from container client
const blockBlobClient: BlockBlobClient = containerClient.getBlockBlobClient(blobName);
// Upload buffer
await blockBlobClient.uploadData(buffer);
}
Отправка блочного BLOB-объекта из строки
В следующем примере передается блочный BLOB-объект из строки:
async function uploadBlobFromString(
containerClient: ContainerClient,
blobName: string,
fileContents: string
): Promise<void> {
// Create blob client from container client
const blockBlobClient: BlockBlobClient = containerClient.getBlockBlobClient(blobName);
await blockBlobClient.upload(fileContents, fileContents.length);
}
Отправка блочного BLOB-объекта с параметрами конфигурации
При отправке большого двоичного объекта можно определить параметры конфигурации клиентской библиотеки. Эти параметры можно настроить для повышения производительности, повышения надежности и оптимизации затрат. В примерах кода в этом разделе показано, как задать параметры конфигурации с помощью интерфейса BlockBlobParallelUploadOptions и как передать эти параметры в качестве параметра в вызов метода отправки.
Указание параметров передачи данных при отправке
Вы можете настроить свойства в BlockBlobParallelUploadOptions , чтобы повысить производительность операций передачи данных. В следующей таблице перечислены свойства, которые можно настроить, а также описание:
Свойство | Описание |
---|---|
blockSize |
Максимальный размер блока для передачи для каждого запроса в рамках операции отправки. |
concurrency |
Максимальное количество параллельных запросов, которые выдаются в любой момент времени в рамках одной параллельной передачи. |
maxSingleShotSize |
Если размер данных меньше или равен этому значению, они передаются одним пакетом, а не разбиваются на блоки. Если данные передаются за один снимок, размер блока игнорируется. Значение по умолчанию — 256 МиБ. |
В следующем примере кода показано, как задать значения для BlockBlobParallelUploadOptions и включить параметры в рамках вызова метода отправки. Значения, указанные в примерах, не предназначены для того, чтобы быть рекомендацией. Чтобы правильно настроить эти значения, необходимо учитывать конкретные потребности приложения.
async function uploadWithTransferOptions(
containerClient: ContainerClient,
blobName: string,
localFilePath: string
): Promise<void> {
// Specify data transfer options
const uploadOptions: BlockBlobParallelUploadOptions = {
blockSize: 4 * 1024 * 1024, // 4 MiB max block size
concurrency: 2, // maximum number of parallel transfer workers
maxSingleShotSize: 8 * 1024 * 1024, // 8 MiB initial transfer size
};
// Create blob client from container client
const blockBlobClient: BlockBlobClient = containerClient.getBlockBlobClient(blobName);
await blockBlobClient.uploadFile(localFilePath, uploadOptions);
}
Отправка блочного BLOB-объекта с тегами индекса
Теги индекса больших двоичных объектов классифицируют данные в учетной записи хранения с помощью атрибутов тегов типа "ключ-значение". Эти теги автоматически индексируются и представляются в виде многомерного индекса с поддержкой поиска для упрощения нахождения данных.
В следующем примере передается блочный BLOB-объект с тегами индекса, заданными с помощью BlockBlobParallelUploadOptions:
async function uploadBlobWithIndexTags(
containerClient: ContainerClient,
blobName: string,
localFilePath: string
): Promise<void> {
// Specify index tags for blob
const uploadOptions: BlockBlobParallelUploadOptions = {
tags: {
'Sealed': 'false',
'Content': 'image',
'Date': '2023-06-01',
}
};
// Create blob client from container client
const blockBlobClient: BlockBlobClient = containerClient.getBlockBlobClient(blobName);
await blockBlobClient.uploadFile(localFilePath, uploadOptions);
}
Настройка уровня доступа большого двоичного объекта при отправке
Уровень доступа большого двоичного объекта можно задать при отправке с помощью интерфейса BlockBlobParallelUploadOptions . В следующем примере кода показано, как задать уровень доступа при отправке большого двоичного объекта:
async function uploadBlobWithAccessTier(
containerClient: ContainerClient,
blobName: string,
localFilePath: string
): Promise<void> {
// Upload blob to 'Cool' access tier
const uploadOptions: BlockBlobParallelUploadOptions = {
tier: 'Cool'
};
// Create blob client from container client
const blockBlobClient: BlockBlobClient = containerClient.getBlockBlobClient(blobName);
await blockBlobClient.uploadFile(localFilePath, uploadOptions);
}
Установка уровня доступа разрешена только для блочных BLOB-объектов. Для блочного BLOB-объекта Hot
можно задать уровень доступа , Cool
, Cold
или Archive
. Чтобы задать уровень Cold
доступа , необходимо использовать минимальную версию клиентской библиотеки 12.13.0.
Дополнительные сведения об уровнях доступа см. в статье Общие сведения об уровнях доступа.
Ресурсы
Дополнительные сведения об отправке BLOB-объектов с помощью клиентской библиотеки Хранилище BLOB-объектов Azure для JavaScript и TypeScript см. в следующих ресурсах.
Операции REST API
Пакет Azure SDK для JavaScript и TypeScript содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API через знакомые парадигмы языка. Методы клиентской библиотеки для отправки больших двоичных объектов используют следующие операции REST API:
- Вставка большого двоичного объекта (REST API)
- Put Block (REST API)
Примеры кода
Просмотрите примеры кода из этой статьи (GitHub):
- Отправка из локального пути к файлу
- Отправка из буфера
- Отправка из потока
- Отправка из строки
- Отправка с параметрами передачи
- Отправка с помощью тегов индекса
- Отправка с уровнем доступа