我正在使用 python boto3 库通过蜂窝连接将文件从 s3 下载到 IOT 设备,这通常很慢而且不稳定。
一些文件非常大(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 有断点续传的功能。
您可以通过使用远程获取来自己实现一个。使用 head_object 预先查找对象的大小,然后将其分成 N 个范围,单独下载它们(可能并行 K 个 block ,具体取决于您的硬件),将它们作为 block 存储在本地文件系统中,并在所有 block 完成后将它们重新组合到最终下载中。
response = client.get_object(
Bucket='mybucket',
Key='mykey',
Range='bytes=10001-20000'
)
关于python - 我可以从 aws s3 恢复下载吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59125125/