首页 > 解决方案 > 使用 @azure/storage-blob 将 blob 从一个存储帐户复制到另一个

问题描述

使用 @azure/storage-blob 将 blob 从一个存储帐户复制到另一个存储帐户的最佳方法是什么?

我想最好使用流而不是下载然后上传,但想知道下面的代码是否是使用流的正确/最佳实现。

const srcCredential = new ClientSecretCredential(<src-ten-id>, <src-client-id>, <src-secret>);
const destCredential = new ClientSecretCredential(<dest-ten-id>, <dest-client-id>, <dest-secret>);

const srcBlobClient = new BlobServiceClient(<source-blob-url>, srcCredential);
const destBlobClient = new BlobServiceClient(<dest-blob-url>, destCredential);

const sourceContainer = srcBlobClient.getContainerClient("src-container");
const destContainer = destBlobClient.getContainerClient("dest-container");

const sourceBlob = sourceContainer.getBlockBlobClient("blob");
const destBlob = destContainer.getBlockBlobClient(sourceBlob.name)

// copy blob
await destBlob.uploadStream((await sourceBlob.download()).readableStreamBody);

标签: node.jsazure-storageazure-blob-storageazure-node-sdk

解决方案


您当前的方法是下载源 blob,然后重新上传它,这并不是最佳的。

更好的方法是使用async copy blob. 您要使用的方法是beginCopyFromURL(string, BlobBeginCopyFromURLOptions). 您需要Shared Access Signature在至少具有Read权限的源 blob 上创建一个 URL。您可以使用generateBlobSASQueryParametersSDK 方法来创建它。

const sourceBlob = sourceContainer.getBlockBlobClient("blob");
const destBlob = destContainer.getBlockBlobClient(sourceBlob.name);

const sourceBlobSasUrl = GenerateSasUrlWithReadPermissionOnSourceBlob(sourceBlob);
// copy blob
await destBlob.beginCopyFromURL(sourceBlobSasUrl);

推荐阅读