im尝试从一个S3存储桶中复制gzip文件,并使用gzip库将其内容提取到另一个S3存储桶中。 即时通讯出现错误
不支持从头开始搜索
import boto3, json
from io import BytesIO
import gzip
def lambda_handler():
try:
s3 = boto3.resource('s3')
copy_source = {
'Bucket': 'srcbucket',
'Key': 'samp.gz'
}
bucket = s3.Bucket('destbucket')
bucketSrc = s3.Bucket('srcbucket')
s3Client = boto3.client('s3', use_ssl=False)
s3Client.upload_fileobj( # upload a new obj to s3
Fileobj=gzip.GzipFile( # read in the output of gzip -d
None, # just return output as BytesIO
'rb', # read binary
fileobj=BytesIO(s3Client.get_object(Bucket='srcbucket', Key='samp.gz')['Body'].read())),
Bucket='destbucket', # target bucket, writing to
Key="") # target key, writing to
except Exception as e:
print(e)
答案 0 :(得分:0)
您无法解压缩ZIP文件并以您尝试的方式上传其组成文件。
您可以将整个ZIP文件解压缩到/tmp
中的Lambda本地磁盘上(请注意,该磁盘空间限制为512MB),然后逐个文件上传。或者,如果它不适合放在磁盘上,或者您不想持久保存在桌面上,则可以逐个文件地将ZIP文件的内容流式传输到内存中,然后将每个流上传到S3。在这两种解决方案中,您都需要为每次上传提供适当的密钥。