复制带有require_sync = True的Blob时发生AzureMissingResourceHttpError,除非容器是公共的

时间:2019-06-05 14:55:32

标签: python azure

我想在同一个存储帐户中将blob从一个私有容器复制到另一个私有容器。

我编写了使用BlockBlobService的代码,并使用存储帐户名和帐户密钥进行了初始化。

几天后我发现它运行良好,但是突然之间require_sync选项出现问题。

from azure.storage.blob import BlockBlobService

blos = BlockBlobService("some-storage-account", "some-storage-key")

blos.copy_blob("some-target-container", "some-target-key", blos.make_blob_url("source-container", "source_key"), requires_sync=True)

此操作失败

AzureMissingResourceHttpError:指定的资源不存在。错误代码:CannotVerifyCopySource

blos.copy_blob("some-target-container", "some-target-key", blos.make_blob_url("source-container", "source_key"))

这很好。

我正在使用Python2.7。

在python3中,它说require_sync是意外的关键字参数。我现在只需要它在2.7中工作即可。

编辑:我已经解决了-

wait = blos.copy_blob("some-target-container", "some-target-key", blos.make_blob_url("source-container", "source_key"))
while wait.status == 'pending':
    time.sleep(0.5)

但是我不确定这是否是最好的解决方法。

编辑:更改为wait.status!='成功'变为wait.status =='待处理'

1 个答案:

答案 0 :(得分:0)

请尝试安装最新的azure-storage-blob 2.0.1软件包。

对于此错误“ AzureMissingResourceHttpError:指定的资源不存在。”,应使用您提到的公共容器,或将sasToken添加到blob url(如https://xxx.blob.core.windows.net/f22/gen2.JPG?sasToken)。

我在python 3.7中进行了测试,可以通过设置参数requires_sync=True正常工作。

代码:

from azure.storage.blob import BlockBlobService

accountName="yy3"
accountKey="xxxx"

blobs = BlockBlobService(account_name=accountName,account_key=accountKey)

copySource="https://yy3.blob.core.windows.net/f22/gen2.JPG?sasToken"

blobs.copy_blob("aa1","copy_gen2.jpg",copySource,requires_sync=True)

print("completed")

请注意,目标/源容器都是私有的。

结果如下,将blob文件复制到目标容器:

enter image description here

这是copy_blob方法的源代码,而requires_sync是有效的参数。

enter image description here