Node.js 使用@azure/storage blob将blob从一个存储帐户复制到另一个存储帐户
使用@azure/storage blob将blob从一个存储帐户复制到另一个存储帐户的最佳方法是什么 我认为使用流最好,而不是下载然后上传,但我想知道下面的代码是否是使用流的正确/最佳实现Node.js 使用@azure/storage blob将blob从一个存储帐户复制到另一个存储帐户,node.js,azure-storage,azure-storage-blobs,azure-node-sdk,Node.js,Azure Storage,Azure Storage Blobs,Azure Node Sdk,使用@azure/storage blob将blob从一个存储帐户复制到另一个存储帐户的最佳方法是什么 我认为使用流最好,而不是下载然后上传,但我想知道下面的代码是否是使用流的正确/最佳实现 const srcCredential = new ClientSecretCredential(<src-ten-id>, <src-client-id>, <src-secret>); const destCredential = new ClientSecretCr
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);
const srcredential=new ClientSecretCredential(,);
const destCredential=新客户端secretCredential(,);
const srcBlobClient=新的BlobServiceClient(,srcCredential);
const destBlobClient=新的BlobServiceClient(,destCredential);
const sourceContainer=srcBlobClient.getContainerClient(“src容器”);
const destContainer=destBlobClient.getContainerClient(“dest容器”);
const sourceBlob=sourceContainer.getBlockBlobClient(“blob”);
const destBlob=destContainer.getBlockBlobClient(sourceBlob.name)
//复制斑点
wait destBlob.uploadStream((wait sourceBlob.download()).readableStreamBody);
您当前的方法是下载源blob,然后重新上传它,这并不是真正的最佳方法
更好的方法是使用异步复制blob
。您希望使用的方法是。您需要在源blob上创建一个至少具有读取权限的共享访问签名
URL。您可以使用SDK方法来创建它
const sourceBlob = sourceContainer.getBlockBlobClient("blob");
const destBlob = destContainer.getBlockBlobClient(sourceBlob.name);
const sourceBlobSasUrl = GenerateSasUrlWithReadPermissionOnSourceBlob(sourceBlob);
// copy blob
await destBlob.beginCopyFromURL(sourceBlobSasUrl);
真奇怪。你能告诉我更多关于你的设置吗?请编辑您的问题并包含最新代码。此外,您应该能够深入挖掘错误消息,并查看哪个HTTP头的格式不正确。也请分享。对不起,我没有在SAS之前添加BLOBURL部分。但是,我现在遇到的问题是,它抛出了一个错误,说“RestError:此存储帐户上不允许公共访问”。存储帐户配置为禁用公共blob访问,但配置为允许SAS已启用“允许共享密钥访问”。只有在启用公共访问时,这才有效吗?请查看此线程:和此线程:。似乎要使此解决方案起作用,应该启用公共访问。它起作用了!!很抱歉,它又是URL(缺少SAS查询参数之前的“?”),这就是为什么出现公共访问错误时认为它只是一个URL。您不需要在存储帐户上启用“公共访问”,只需要启用SAS访问即可。我能够在一个大文件上执行复制,而且完成得非常快。谢谢你的回答!!