python - 无法使用 start_copy_from_url 在 Azure 中复制 blob

标签 python azure azure-blob-storage

我正在尝试将一个 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 名称作为快照参数传递?我对此很困惑

错误代码:InvalidQueryParameterValue 错误:无 QueryParameterName:快照 QueryParameterValue:mycontainer/subfolder/myblob.txt

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

最佳答案

不熟悉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")

关于python - 无法使用 start_copy_from_url 在 Azure 中复制 blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66356513/

相关文章:

json - 从 ADF 中的 API 提取数据

python - PyYAML 转储格式

python - 在 Django/Python 中规范化街道地址

python - lerp 移动和键盘移动按钮 - 快速按下会导致角色卡在原地

python - 如果Python中没有数据或空行,如何删除带下划线的字符串/名称

azure - 在 Microsoft Azure 存储上设置 Blob 磁盘缓存

azure - 如何跟踪Azure网站备份进度?

c# - Azure Application Insights HTTP 依赖项跟踪问题

json - 如何使用 Blob 存储上的 JSON 作为 Azure 数据工厂的参数?

Azure blob 图像未在浏览器中加载