微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用@azure/storage-blob 将 blob 从一个存储帐户复制到另一个存储帐户

如何解决使用@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);

解决方法

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。