无法将容器从 Azure 复制到本地模拟器

Failed to copy container from Azure to Local Emulator

场景

我想将整个容器从我在 Azure 的存储帐户复制到我在存储模拟器的本地存储帐户。我为两个帐户生成了 SAS 令牌。 我试过 windows 10 CMD:

azcopy copy "https://myazuresrg.blob.core.windows.net/mycontainer/?
sv=2020-08-04&ss=b&srt=co&sp=rltf&se=2021-09-10T15:14:05Z&st=2021-09-
10T07:14:05Z&spr=https&sig=Eb%2FsK9kmwVDJt2PPg2a6wocXkK7EDrj3fgY8uT5dI
IE%3D" "http://127.0.0.1:10000/devstoreaccount1/mycontainer?
sv=2019-07-07&sr=c&sig=XXXXXXXX&se=2021-09-11T07%3A29%3A46Z&sp=rwdl" -
-recursive=true --from-to=BlobLocal

问题

在日志中我可以看到错误:

DOWNLOADFAILED:
 https://myazuresrg.blob.core.windows.net/mycontainer/website/footer.js
on?se=2021-09-10t15%3A14%3A05z&sig=-REDACTED-
&sp=rltf&spr=https&srt=co&ss=b&st=2021-09-10t07%3A14%3A05z&sv=2020-08-
04 : 000 : File Creation Error mkdir \?
\C:\AzCopy\http:7.0.0.1:10000\devstoreaccount1\mycontainer?sv=2019-
07-07&sr=c&sig=-REDACTED-&se=2021-09-
11T07%3A29%3A46Z&sp=rwdl\mycontainer\website: The filename, directory 
name, or volume label syntax is incorrect.

为什么 Azcopy 将预路径 \C:\AzCopy 添加到我的本地帐户模拟器路径?

这里有两个问题:

  1. --from-to 的使用不正确。基本上,当您想将 blob 从存储下载到本地计算机时,您会使用 --from-to=BlobLocal。这就是您看到 azcopy 将 \C:\AzCopy 添加到本地模拟器路径的原因。

  2. 您不能使用 azcopy copy 将 blob 从云存储帐户复制到您的存储模拟器。本质上,复制 blob 操作是一种异步操作,一旦您启动复制操作,Azure 存储服务就会异步地将 blob 从源帐户复制到目标帐户。为此,源帐户和目标帐户都必须在云端。 Azure 存储服务必须能够连接到这两个帐户。考虑到您的目标帐户是本地计算机上的存储模拟器 运行,Azure 存储服务将无法访问它,因此复制操作将失败。

在这种情况下,您需要先将存储帐户中的 blob 下载到本地计算机,然后将其上传到存储模拟器中。