我正在尝试将一个 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/