Share via


下載具有 TypeScript 的 Blob

本文說明如何使用適用於 JavaScript 的 Azure 儲存體用戶端程式庫來下載 Blob。 您可以將 Blob 資料下載到各種目的地,包括本機檔案路徑、資料流或文字字串。

必要條件

  • 本文中的範例假設您已有設定好要搭配適用於 JavaScript 的 Azure Blob 儲存體用戶端程式庫使用的專案。 若要了解如何設定專案,包括套件安裝、匯入模組,以及建立授權的用戶端物件來處理資料資源,請參閱開始使用 Azure Blob 儲存體和 TypeScript
  • 授權機制必須具有執行下載作業的權限。 若要深入了解,請參閱下列 REST API 作業的授權指導:

下載 Blob

您可以使用下列任一方法來下載 Blob:

下載至檔案路徑

下列範例會搭配使用檔案路徑與 BlobClient.downloadToFile 方法來下載 Blob。 這個方法只能在 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}`
    );
  }
}

以串流的形式下載

下列範例會透過建立 Node.js 可寫入串流物件,然後使用 BlobClient.download 方法透過管道傳送至該串流,以下載 Blob。

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 方法,將 Blob 下載至字串。 在 Node.js 中,Blob 資料會在 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 中瀏覽器的範例使用方式。

資源

若要深入了解如何使用適用於 JavaScript 和 TypeScript 的 Azure Blob 儲存體用戶端程式庫下載 Blob,請參閱下列資源。

REST API 操作

適用於 JavaScript 和 TypeScript 的 Azure SDK 包含建置在 Azure REST API 之上的程式庫,可讓您透過熟悉的語言範例與 REST API 作業進行互動。 用來下載 Blob 的用戶端程式庫方法會使用下列 REST API 作業:

程式碼範例

檢視本文中的程式碼範例 (GitHub):

用戶端程式庫資源