我想在同一个存储帐户中将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 =='待处理'
答案 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文件复制到目标容器:
这是copy_blob
方法的源代码,而requires_sync
是有效的参数。