如何用Python AWS Lambda函数上传Excel至S3并解决文件损坏问题?
解决Lambda上传Excel到S3后文件损坏的问题
你的代码核心问题是传递给put_object的Body参数错误:你传入的是文件路径字符串,而非实际的文件二进制内容,导致S3中存储的只是一段文本,而非真正的Excel文件,因此无法正常打开。
修正方案一:读取文件内容后上传
通过open函数以二进制读模式打开文件,将文件对象作为Body参数传入:
import boto3 def uploadtoS3(filename=str): s3 = boto3.client('s3') bucket = 'aws-day-ahead-estimations' file_path = '/tmp/' + filename # 二进制读模式打开文件,确保读取Excel的二进制内容 with open(file_path, 'rb') as file_obj: s3.put_object(Bucket=bucket, Body=file_obj, Key=filename) print('put complete')
修正方案二:使用更简洁的upload_file方法
boto3提供了upload_file方法,直接接收文件路径即可完成上传,代码更简洁:
import boto3 def uploadtoS3(filename=str): s3 = boto3.client('s3') bucket = 'aws-day-ahead-estimations' file_path = '/tmp/' + filename # 直接传入文件路径、桶名和目标键 s3.upload_file(file_path, bucket, filename) print('upload complete')
额外注意事项
- Lambda的
/tmp目录默认最大可用空间为512MB,确保生成的Excel文件大小不超过此限制; - 确认Lambda执行角色已配置
s3:PutObject权限,且权限范围覆盖目标存储桶aws-day-ahead-estimations。
内容的提问来源于stack exchange,提问作者Renzins Pukis
相关产品推荐
相关产品推荐

