NodeJS 尝试在存储帐户之间复制blob时出现“指定的blob不存在”

vwoqyblh  于 2023-06-05  发布在  Node.js
关注(0)|答案(1)|浏览(144)

我正在编写一个脚本,将Blob从一个Azure Blob存储容器复制到另一个;可能在不同的存储帐户中。我是如何做到这一点的要点如下:

const sourceBlobClient = BlobServiceClient.fromConnectionString(sourceConnectionString);
const sourceContainer = sourceBlobClient.getContainerClient(sourceContainerName);

const targetBlobClient = BlobServiceClient.fromConnectionString(targetConnectionString);
const targetContainer = targetBlobClient.getContainerClient(targetContainerName);

const blobName = 'something';

const sourceBlobClient = sourceContainer.getBlobClient(blobName);
const targetBlobClient = targetContainer.getBlobClient(sourceBlobClient.name);

const copyResponse = await targetBlobClient.beginCopyFromURL(sourceBlobClient.url);
// Wait on copyResponse

当在本地测试并在具有相同存储帐户的Docker Azurite容器中的两个Azure容器之间复制时,它工作正常。
但实际上,源和目标将位于不同存储帐户的不同计算机上。当我运行相同的代码(将源的连接字符串替换为远程机器)时,我得到一个错误(粘贴很长消息的最后一部分):

details: {
  errorCode: 'BlobNotFound',
  connection: 'keep-alive',
  'content-type': 'application/xml',
  date: '<. . .>',
  'keep-alive': 'timeout=5',
  server: 'Azurite-Blob/3.23.0',
  'transfer-encoding': 'chunked',
  'x-ms-request-id': '<. . .>',
  message: 'The specified blob does not exist.\n' +
    'RequestId:<. . .>\n' +
    'Time:<. . .>',
  code: 'BlobNotFound'
}

blob明确存在于远程源中(其名称是从对listBlobsFlat的调用中提取的)。
我不确定这是什么原因。docs seem to suggest that copying between accounts is now possible(此文本在beginCopyFromURL文档中重复):
在2012-02-12及更高版本中,复制Blob操作的源可以是任何Azure存储帐户中的已提交Blob
我是不是误解了文件?还有什么事吗?

r55awzrz

r55awzrz1#

要跨存储帐户复制blob,源blob必须可公开访问。请为源blob创建至少具有“读取”权限的SAS URL,并使用该URL进行复制。

相关问题