我正在尝试从azure blob的子目录下载blob。我只能下载几个文件,但对于剩余文件,它会抛出“ HTTP状态代码= 416,异常=指定的范围对于资源的当前大小无效。错误代码:InvalidRange”。我能够直接从azure下载blob,但是以编程方式只有很少的下载
答案 0 :(得分:0)
以下是有关您的错误的说明,请参阅存储服务的官方文档Common REST API Error Codes
。
由于您的描述中没有任何代码,因此我在此处发布示例代码作为参考。
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属性来解决它,或者让它发生-文件无论如何都应该下载。
我已验证它,并且如果吞下了这些异常,则可以确认零长度文件是否已正确下载。