我正在使用 python boto3 库通过蜂窝连接将文件从 s3 下载到物联网设备,该连接通常缓慢且不稳定。
有些文件非常大(250Mb,对于这种情况来说很大),并且在下载时网络出现故障并且设备重新启动。
我想从设备重新启动时结束的位置恢复下载。有什么办法可以做到吗?
中止的下载似乎在下载时将下载的数据保留在临时文件中,因此数据就在那里。
目标是节省数据传输并使下载更具弹性。
我正在使用分段上传,但不会自动恢复。
我正在做的是这样的:
s3 = boto.resource('s3')
session = boto.session.Session(region_name='eu-central-1', profile_name=profile)
s3client = session.client( 's3', config=boto.session.Config(signature_version='s3v4'))
MB = 1024 ** 2
config = TransferConfig(
multipart_threshold=10*MB,
num_download_attempts=100)
def upload():
s3client.upload_file(Filename=localfile, Bucket=bucket, Key=key, Config=config)
def download():
s3client.download_file(bucket, key, localfile, Config=config )
# upload from server...
upload()
# .... later, from IOT device
download()
我不相信boto3有断点续传的功能。
您可以通过使用范围获取来自己实现一个。使用预先查找对象的大小头对象 https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.head_object,然后将其分成 N 个范围,单独下载它们(可能并行下载 K 个块,具体取决于您的硬件),将它们作为块存储在本地文件系统上,并在所有块完成后将它们重新组合到最终下载中。
response = client.get_object(
Bucket='mybucket',
Key='mykey',
Range='bytes=10001-20000'
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)