Vin*_*mel 4 python azure-blob-storage
我必须升级一个使用旧版本的 microsoft azure python 包从 api 下载数据的 docker 容器,然后将 json 上传到 Azure Blob 存储。因此,由于不再允许使用以前的“azure”元包的 pip 安装,我必须使用新的独立包(azure-storage-blob==12.6.0)。
从旧“azure”包中集成的 blockblobservice 中的函数“create_blob_from_path”切换到新的独立包,BlobClient.upload() 在较大文件上失败,并出现超时错误,完全忽略函数的超时参数。
我收到 ServiceResponseError 消息“连接中止/写入操作超时”
有什么办法可以解决这个错误吗?
新函数感觉像是从 create_blob_from_path 向后退了一大步,缺少progress_callback 主要是令人遗憾的......
小智 7
如果您的控制流允许,正确的解决方案似乎是在max_single_put_size创建BlobClient. 您可以在调用构造函数时使用关键字参数来完成此操作。
但是,据我所知,如果通过BlobClient.from_blob_url控制流创建 BlobClient,则无法配置此参数。默认值为 64MB,在 64MB PUT 完成之前很容易达到默认连接超时。在某些应用程序中,您可能无权访问存储帐户的身份验证凭据(即您只是使用签名的 URL),因此创建 的唯一方法BlobClient是通过BlobClient.from_blob_url调用。
解决方法似乎是connection_timeout在upload_blob调用中设置记录不完整的参数,而不是timeout参数。所以,像这样:
upload_result = block_blob_client.upload_blob(
data,
blob_type="BlockBlob",
content_settings=content_settings,
length=file_size,
connection_timeout=600,
)
Run Code Online (Sandbox Code Playgroud)
该参数记录在此页面上:
然而,目前官方文档中还没有BlobClient记录:
我已提交此文档错误:https://github.com/Azure/azure-sdk-for-python/issues/22936