You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Lambda复制文件至S3桶后文件为空的问题求助

问题原因

你的Lambda代码调用s3.put_object()时,仅指定了目标S3桶和文件键(Key),但没有传入文件的实际内容。S3的put_object接口如果不提供Body参数,默认会创建一个空文件,这就是你看到两个文件为空的原因。

修正方案

修改代码,在调用put_object时读取本地文件的内容并传入Body参数。示例代码如下:

import boto3
import os

s3 = boto3.client('s3')

def lambda_handler(event, context):
    bucket = 'source-bucket-6'

    # 遍历当前目录下的文件
    files = [f for f in os.listdir('.') if os.path.isfile(f)]
    for f in files:
        if f != "lambda_function.py":
            # 读取文件内容,以二进制模式打开保证兼容性
            with open(f, 'rb') as file_content:
                s3.put_object(Bucket=bucket, Key=f, Body=file_content)
            print(f"已上传文件: {f} ")
    
    print("所有文件上传完成")
额外说明
  • 使用with open(...)上下文管理器可以确保文件自动关闭,避免资源泄漏
  • 以二进制模式(rb)读取文件,能正确处理图片、HTML、文本等各类文件的编码问题
  • 确认Lambda执行角色拥有s3:PutObject权限,否则会出现上传失败的权限错误

内容的提问来源于stack exchange,提问作者AEM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 04:00:03