Python 我可以从aws s3继续下载吗?
我使用PythonBoto3库将文件从s3下载到蜂窝连接上的IOT设备上,这通常是缓慢和不稳定的 有些文件相当大(250Mb,在这种情况下是很大的),网络出现故障,设备在下载时重新启动 我想从设备重新启动时结束的位置继续下载。有什么办法吗 中止的下载似乎在下载时将下载的数据保存在临时文件中,因此数据就在那里 其目标是节省数据传输并使下载更具弹性 我使用多部分上传,但没有恢复发生本身 我现在做的是这样的:Python 我可以从aws s3继续下载吗?,python,amazon-web-services,amazon-s3,boto3,Python,Amazon Web Services,Amazon S3,Boto3,我使用PythonBoto3库将文件从s3下载到蜂窝连接上的IOT设备上,这通常是缓慢和不稳定的 有些文件相当大(250Mb,在这种情况下是很大的),网络出现故障,设备在下载时重新启动 我想从设备重新启动时结束的位置继续下载。有什么办法吗 中止的下载似乎在下载时将下载的数据保存在临时文件中,因此数据就在那里 其目标是节省数据传输并使下载更具弹性 我使用多部分上传,但没有恢复发生本身 我现在做的是这样的: s3 = boto.resource('s3') session = boto.sessio
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()
从终端,您可以使用aws s3api对s3进行低级访问
size=$(stat myfile.zip);aws s3api获取对象——bucket BUCKETNAME——key myfile.zip——范围“bytes=$size-”myfile.part;cat myfile.part>>myfile.zip
我认为您可以通过python调用这个命令。不太难。我不相信boto3有可恢复的下载功能 您可以通过使用远程get来实现一个。使用预先找到对象的大小,然后将其拆分为N个范围,分别下载它们(可能是K个并行块,取决于您的硬件),将它们作为块存储在本地文件系统中,并在所有块完成后将其重新组合到最终下载中
response = client.get_object(
Bucket='mybucket',
Key='mykey',
Range='bytes=10001-20000'
)
我想这是最后的办法。但这是用python编写的大量实用程序的一部分,因此我更喜欢使用API而不是执行外部命令command@sagismAWS CLI使用AWS SDK(您称之为API)。所以你可以对SDK使用同样的方法。是的,这就是问题所在,我只需要设计一个跟踪机制。