Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我可以从aws s3继续下载吗?_Python_Amazon Web Services_Amazon S3_Boto3 - Fatal编程技术网

Python 我可以从aws s3继续下载吗?

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

我使用PythonBoto3库将文件从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()

从终端,您可以使用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使用同样的方法。是的,这就是问题所在,我只需要设计一个跟踪机制。