Azure python sdk:从 SAS 令牌复制 blob

Azure python sdk: copy blob from SAS token

我正在尝试以编程方式将磁盘快照复制到存储帐户。

from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient

connString= "storageaccount connection string"
blob_client = BlobClient(connString,container_name,'test1')

copy_source_url =r"SASTOKEN"

blob_client.start_copy_from_url(copy_source_url)

我 运行 参与了这个问题:

[Errno 11001] getaddrinfo failed

我发现我可以用这段代码重现错误:

import socket
try:
    print(socket.getaddrinfo(copy_source_url,80))
except Exception, e:
    print(type(e))
    print(e)

我玩了一会儿,发现用base url (md-.blob.core.windows.net)可以成功运行 socket.getaddrinfo 但是当我包括它不起作用的其余 sas 令牌。

我需要做些什么才能使 sas url 在 python 中工作(我可以在浏览器中使用 link 下载文件),还是它可以让 SDK 跳过这个 getaddrinfo 吗?

哦,顺便说一下,我尝试了端口 80 和 443。

编辑:当运行本地代码或运行通过天蓝色自动化帐户时,都会发生这种情况。我正在使用 python 2.7 来支持自动化帐户。

我在我这边测试了一下,发现你的代码有问题。由于我们需要将源文件的内容复制到存储中的目标文件中,因此我们无法获得如下代码所示的blob_client

blob_client = BlobClient(connString,container_name,'test1')

我们需要将源文件的内容写入目标文件("test1"),所以我们需要对它的"Write"权限。所以我们应该生成包含“Write”权限的“test1”的SAS url(在我的截图中,我创建了一个名为“file1.csv”的目标文件测试和我 select 所有四个权限)。

然后使用下面的代码得到blob_client:

blob_client = BlobClient.from_blob_url("SAS url of file1.csv which we generated above")

现在我们需要在存储中生成源文件的SAS url(我创建了一个“file2.csv”作为源文件),它只需要“读取”权限。然后从url.

开始复制
copy_source_url = r"SAS url of the source file which we generated"

blob_client.start_copy_from_url(copy_source_url, metadata=None, incremental_copy=False)

之后,代码可以正常将源文件(“file2.csv”)的内容复制到目标文件(“file1.csv”)。以下是我的所有代码供您参考: