python - 无法使用 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
任何想法我做错了什么或如何绕过这个?
解决方案
不熟悉 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")