JavaScript を使用して BLOB をアップロードする

この記事では、JavaScript 用の Azure Storage クライアント ライブラリを使用して BLOB をアップロードする方法について説明します。 ファイル パス、ストリーム、バッファー、またはテキスト文字列からブロック BLOB にデータをアップロードできます。 インデックス タグを使用して BLOB をアップロードすることもできます。

前提条件

  • この記事の例では、JavaScript 用の Azure Blob Storage クライアント ライブラリを操作するためのセットアップ済みプロジェクトが既にあることを前提としています。 パッケージのインストール、モジュールのインポート、データ ソースの操作が認可されたクライアント オブジェクトの作成を含むプロジェクトの設定については、「Azure Blob Storage と JavaScript の使用開始」を参照してください。
  • 認可メカニズムには、アップロード操作を実行するためのアクセス許可が必要です。 詳細については、次の REST API 操作の認可ガイダンスを参照してください。

ブロック BLOB にデータをアップロードする

次のいずれかのメソッドを使用して、ブロック BLOB にデータをアップロードできます。

これらの各メソッドは、BlockBlobClient オブジェクトを使用して呼び出すことができます。

ファイル パスからブロック BLOB をアップロードする

次の例では、ローカル ファイル パスからブロック BLOB をアップロードします。

// containerClient: ContainerClient object
// blobName: string, includes file extension if provided
// localFilePath: fully qualified path and file name
async function uploadBlobFromLocalPath(containerClient, blobName, localFilePath){
  // Create blob client from container client
  const blockBlobClient = containerClient.getBlockBlobClient(blobName);

  await blockBlobClient.uploadFile(localFilePath);
}

ストリームからブロック BLOB をアップロードする

次の例では、読み取り可能なストリームを作成し、そのストリームをアップロードして、ブロック BLOB をアップロードします。

// containerClient: ContainerClient object
// blobName: string, includes file extension if provided
// readableStream: Readable stream, for example, a stream returned from fs.createReadStream()
async function uploadBlobFromReadStream(containerClient, blobName, readableStream) {
  // Create blob client from container client
  const blockBlobClient = containerClient.getBlockBlobClient(blobName);

  // Upload data to block blob using a readable stream
  await blockBlobClient.uploadStream(readableStream);
}

バッファーからブロック BLOB をアップロードする

次の例では、ブロック BLOB を Node.js バッファーからアップロードします。

// containerClient: ContainerClient object
// blobName: string, includes file extension if provided
// buffer: blob contents as a buffer, for example, from fs.readFile()
async function uploadBlobFromBuffer(containerClient, blobName, buffer) {

  // Create blob client from container client
  const blockBlobClient = containerClient.getBlockBlobClient(blobName);

  // Upload buffer
  await blockBlobClient.uploadData(buffer);
}

文字列からブロック BLOB をアップロードする

次の例では、ブロック BLOB を文字列からアップロードします。

// containerClient: ContainerClient object
// blobName: string, includes file extension if provided
// fileContentsAsString: blob content
async function uploadBlobFromString(containerClient, blobName, fileContentsAsString){
  // Create blob client from container client
  const blockBlobClient = containerClient.getBlockBlobClient(blobName);

  await blockBlobClient.upload(fileContentsAsString, fileContentsAsString.length);
}

構成オプションを使用したブロック BLOB のアップロード

BLOB をアップロードするときに、クライアント ライブラリの構成オプションを定義できます。 これらのオプションは、パフォーマンスを向上させたり、信頼性を高めたり、コストを最適化したりするために調整できます。 このセクションのコード例では、BlockBlobParallelUploadOptions インターフェイスを使用して構成オプションを設定する方法と、それらのオプションをパラメーターとしてアップロード メソッド呼び出しに渡す方法を示します。

アップロード時のデータ転送オプションの指定

BlockBlobParallelUploadOptions でプロパティを構成し、データ転送操作のパフォーマンスを向上させることができます。 次の表に、構成できるプロパティと説明を示します。

プロパティ 説明
blockSize アップロード操作の一部として、要求ごとに転送する最大ブロック サイズ。
concurrency 1 回の並列転送の一部として、任意の時点で発行される並列要求の最大数。
maxSingleShotSize データのサイズがこの値以下の場合は、チャンクに分割されるのではなく、1 つの put でアップロードされます。 データが 1 回のショットでアップロードされた場合、ブロック サイズは無視されます。 既定値は 256 MiB です。

次のコード例は、BlockBlobParallelUploadOptions に値を設定し、そのオプションをアップロードメソッド呼び出しの一部として含める方法を示しています。 このサンプルで使用した値は、推奨を意図したものではありません。 これらの値を適切にチューニングするには、アプリの特定のニーズを考慮する必要があります。

// containerClient: ContainerClient object
// blobName: string, includes file extension if provided
// localFilePath: fully qualified path and file name
async function uploadWithTransferOptions(containerClient, blobName, localFilePath) {
  // Specify data transfer options
  const uploadOptions = {
    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 = containerClient.getBlockBlobClient(blobName);

  // Upload blob with index tags
  await blockBlobClient.uploadFile(localFilePath, uploadOptions);
}

インデックス タグ付きのブロック BLOB をアップロードする

キーと値のタグ属性を使用して、BLOB インデックス タグによってストレージ アカウント内のデータが分類されます。 これらのタグには自動的にインデックスが付けられ、検索可能な多次元インデックスとして公開されるため、データを簡単に見つけることができます。

次の例では、BlockBlobParallelUploadOptions を使用して、インデックス タグが設定されたブロック BLOB をアップロードします。

// containerClient: ContainerClient object
// blobName: string, includes file extension if provided
// localFilePath: fully qualified path and file name
async function uploadWithIndexTags(containerClient, blobName, localFilePath) {
  // Specify index tags for blob
  const uploadOptions = {
    tags: {
      'Sealed': 'false',
      'Content': 'image',
      'Date': '2023-06-01',
    }
  }

  // Create blob client from container client
  const blockBlobClient = containerClient.getBlockBlobClient(blobName);

  // Upload blob with index tags
  await blockBlobClient.uploadFile(localFilePath, uploadOptions);
}

アップロード時に BLOB のアクセス層を設定する

BlockBlobParallelUploadOptions インターフェイスを使用して、アップロード時に BLOB のアクセス層を設定できます。 次のコード例は、BLOB をアップロードするときにアクセス層を設定する方法を示しています。

// containerClient: ContainerClient object
// blobName: string, includes file extension if provided
// localFilePath: fully qualified path and file name
async function uploadWithAccessTier(containerClient, blobName, localFilePath) {
  // Specify access tier
  const uploadOptions = {
    tier: 'Cool',
  }

  // Create blob client from container client
  const blockBlobClient = containerClient.getBlockBlobClient(blobName);

  // Upload blob to cool tier
  await blockBlobClient.uploadFile(localFilePath, uploadOptions);
}

アクセス層の設定はブロック BLOB でのみ許可されています。 ブロック BLOB のアクセス層は、HotCoolCold、または Archive に設定できます。 アクセス層を Cold に設定するには、最小クライアント ライブラリ バージョン 12.13.0 を使用する必要があります。

アクセス層の詳細については、「アクセス層の概要」を参照してください。

リソース

JavaScript 用 Azure Blob Storage クライアント ライブラリを使用した BLOB のアップロードの詳細については、次のリソースを参照してください。

REST API の操作

Azure SDK for JavaScript には Azure REST API に基づいて構築されたライブラリが含まれるため、使い慣れた JavaScript パラダイムを通じて REST API 操作を利用できます。 BLOB をアップロードするためのクライアント ライブラリ メソッドでは、次の REST API 操作を使用します。

コード サンプル

この記事のコード サンプルを表示する (GitHub):

クライアント ライブラリのリソース

こちらもご覧ください