node.js - 使用 @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
在至少具有Read
权限的源 blob 上创建一个 URL。您可以使用generateBlobSASQueryParameters
SDK 方法来创建它。
const sourceBlob = sourceContainer.getBlockBlobClient("blob");
const destBlob = destContainer.getBlockBlobClient(sourceBlob.name);
const sourceBlobSasUrl = GenerateSasUrlWithReadPermissionOnSourceBlob(sourceBlob);
// copy blob
await destBlob.beginCopyFromURL(sourceBlobSasUrl);
推荐阅读
- spring-boot - 从浏览器中的另一个选项卡注销时,Spring Security Keycloak Adapter 无法处理单点注销
- wordpress - 图片大于 2500px 上传错误。但有些超过 3300px 的图片上传正常
- react-native - 如何在功能组件中编写Animated.Value.addListener?
- python - flask ValueError:对已关闭文件的 I/O 操作
- javascript - (Vue.js)访问页面时如何更改“背景图像”
- google-app-engine - 如何降低 gcp 应用引擎部署中的费用?
- c - “void fatal(char *);”是什么意思?
- java - Swagger 递归解析类型的依赖关系(无限循环)
- mysql - MySQL“Invalid use of group function”错误——Hackerrank天气观察20
- python - 无法使用 selenium python 选择下拉值