如何使用boto3将文件上传到S3存储桶内按日期命名的指定文件夹
S3按日期前缀上传文件实现方案
核心前提说明
Amazon S3是对象存储服务,没有传统文件系统的实体文件夹。你在控制台看到的文件夹层级,是S3根据对象Key的
/分隔符自动生成的虚拟结构。只要上传时指定带完整日期前缀的对象Key,就能自动生成对应的日期文件夹展示,无需提前调用接口创建文件夹。
最简实现代码(适配你的原有上传逻辑)
你仅需要调整object_name的生成规则,在文件名前拼接日期前缀即可,原有upload_file逻辑无需修改:
import boto3 from datetime import datetime # 初始化S3客户端(你原有初始化逻辑保持不变即可) s3_client = boto3.client('s3') # 自定义参数 file_name = "你要上传的本地文件名" bucket = "你的S3存储桶名称" # 生成 年/月/日 格式的日期前缀,月、日自动补前导零 today = datetime.today() date_prefix = f"{today.year}/{today.month:02d}/{today.day:02d}/" # 拼接完整的S3对象路径 object_name = f"{date_prefix}{file_name}" # 直接调用原有上传方法即可 response = s3_client.upload_file(file_name, bucket, object_name)
上传完成后,S3控制台会自动展示年/月/日的层级文件夹,和手动创建的文件夹使用体验完全一致。
特殊场景:如需提前创建空文件夹占位
如果你有业务场景需要预先创建当天的空文件夹,可以额外调用put_object接口上传一个大小为0的占位对象即可:
# 预先创建日期文件夹(非必须,仅特殊场景使用) s3_client.put_object( Bucket=bucket, Key=date_prefix # 注意前缀结尾必须带/,才会被识别为文件夹 )
内容的提问来源于stack exchange,提问作者Juliette
相关产品推荐
相关产品推荐

