如何使用Python boto3将文件写入S3存储桶内的指定文件夹
解决方案
核心逻辑
S3属于对象存储服务,不存在传统文件系统的实体文件夹。只要将上传的对象键(Key)配置为目标文件夹名/文件名的格式,S3会自动以路径层级的形式展示内容,无需提前创建目标文件夹。
现有代码问题
- 代码中硬编码了
Key='bulk_movies.json',完全没有用到函数定义的object_name参数,无法自定义上传路径 - boto3客户端初始化拼写错误,
b3.client('s3')应为boto3.client('s3') - 错误将存储桶名和路径拼接作为第二个参数传入,该参数仅支持填写纯存储桶名称,路径需要配置在Key参数中
修正后的实现代码
import boto3 from botocore.exceptions import ClientError def upload_file(file_name, bucket, object_name = None): # 未指定对象名时默认取本地文件的文件名 if object_name is None: object_name = file_name.split('/')[-1] s3 = boto3.client('s3') try: # 使用传入的object_name作为Key response = s3.upload_file(file_name, bucket, Key=object_name) except ClientError as e: print(e) return False print('Success!') return True
上传到指定文件夹的调用示例
要上传到存储桶bucket下的folderInBucket目录,直接将object_name设置为folderInBucket/文件名即可:
upload_file('./s3/bulk_movies.json', 'bucket', object_name='folderInBucket/bulk_movies.json')
内容的提问来源于stack exchange,提问作者proverbialTurdNugget
相关产品推荐
相关产品推荐

