无法从Azure Blob存储区下载Blob

时间:2019-04-15 12:58:06

标签: python azure-blob-storage

我正在尝试从azure blob的子目录下载blob。我只能下载几个文件,但对于剩余文件,它会抛出“ HTTP状态代码= 416,异常=指定的范围对于资源的当前大小无效。错误代码:InvalidRange”。我能够直接从azure下载blob,但是以编程方式只有很少的下载

3 个答案:

答案 0 :(得分:0)

以下是有关您的错误的说明,请参阅存储服务的官方文档Common REST API Error Codes

enter image description here

由于您的描述中没有任何代码,因此我在此处发布示例代码作为参考。

from azure.storage.blob.baseblobservice import BaseBlobService

import os

account_name = '<your account name>'
account_key = '<your account key>'

blob_service = BaseBlobService(
    account_name=account_name,
    account_key=account_key
)

container_name = '<your container name, such as `test`'

# Virtual Directory Name as the prefix string of a blob name
prefix = '<the blob name prefix, such as `images`>' 

# local directory path for downloading blobs
local_path = '<a local directory path for downloading, such as `download`>' 

blobs = blob_service.list_blobs(container_name, prefix=prefix)

for blob in blobs:
    blob_name = blob.name
    blob_base_name = os.path.basename(blob_name)
    file_path = '%s/%s' % (local_path, blob_base_name)
    blob_service.get_blob_to_path(container_name, blob_name, file_path)

希望有帮助。

答案 1 :(得分:0)

当我尝试下载一个空的Blob时出现此错误。使用Peter Pan的代码,您需要添加一个空检查。

blob_info = blob_service.get_blob_properties(container_name, blob_name)
if blob_info.properties.content_length == 0:
    return "empty blob"

答案 2 :(得分:0)

对于长度为零的Blob,您很可能会获得这些例外。在这里(针对Python的Microsoft Azure Storage SDK问题:https://github.com/Azure/azure-storage-python/issues/586),他们说您可以放心地忽略这些异常-捕获和吞咽。此类文件仍可正确下载:

我相信当您尝试下载零长度的Blob时会显示此错误。您可以通过在尝试下载之前检查blob属性来解决它,或者让它发生-文件无论如何都应该下载。

我已验证它,并且如果吞下了这些异常,则可以确认零长度文件是否已正确下载。