首页 > 解决方案 > 无法使用 start_copy_from_url 在 Azure 中复制 blob

问题描述

我正在尝试将 blob 从一个容器复制到同一容器中的子文件夹,但我一直无法这样做。我正在使用 Python Azure SDK 12 并使用此处和许多其他地方提供的示例作为基础https://stackoverflow.com/a/64285413

    blob_service_client = BlobServiceClient.from_connection_string(blob_connection_str)
    container_client = blob_service_client.get_container_client("mycontainer")
    source_blob = container_client.get_blob_client("mycontainer", "myblob.txt")
    destination_blob = container_client.get_blob_client("mycontainer", "subfolder/myblob.txt")

    destination_blob.start_copy_from_url(source_blob.url)

但是,当我运行最后一行时,它会说快照是无效的 queryParam 失败,并且我打印出了 souce_blob.url 它确实不是我所期望的 url

https://myaccount.blob.core.windows.net/mycontainer/mycontainer?snapshot=/mycontainer/subfolder/myblob.txt

所以我尝试自己手动构建 url,就像在这个例子中一样,这个 URL 与我去 Azure 门户获取 blob 的 URL 时得到的 URL 完全相同:https ://stackoverflow.com/a/62401832

    source_blob = (f"https://myaccountname.blob.core.windows.net/mycontainer/subfolder/myblob.txt")
    destination_blob.start_copy_from_url(source_blob)

但由于某种原因,我仍然得到相同的快照错误,我不明白为什么start_copy_from_url将 blob 名称作为快照参数传递?我对此很困惑

ErrorCode:InvalidQueryParameterValue Error:None QueryParameterName:snapshot QueryParameterValue:mycontainer/subfolder/myblob.txt

任何想法我做错了什么或如何绕过这个?

标签: pythonazureazure-blob-storage

解决方案


不熟悉 Python,但是一旦在第 2 行指定容器名称mycontainer,为什么要在第 3 行和第 4 行再次指定它?在这里检查它get_blob_client for Python

代码应该是(第 3 行和第 4 行)

source_blob = container_client.get_blob_client("myblob.txt")
destination_blob = container_client.get_blob_client("subfolder/myblob.txt")

推荐阅读