使用Python boto3在AWS S3中创建文件夹并上传文件到指定目录
S3上传指定目录实现方法
S3 本身不存在传统文件系统的实体文件夹,所有内容都是以「对象」形式存储,对象的键(Key)带/前缀即可模拟文件夹层级,无需提前手动创建文件夹。
修改上传代码的实现
你只需要在调用upload_file时,给第三个参数(即对象Key)拼接你想要的目录前缀即可,修改后的参考代码如下:
def upload_to_s3(self, s3_client, img_path, img_name, s3_folder="pdf_uploads/"): # 拼接目录前缀和文件名,作为S3中的对象键 s3_key = f"{s3_folder}{img_name}" while True: try: s3_client.upload_file(img_path, AWS_S3_BUCKET, s3_key) break except Exception as e: print(e)
举个例子:如果你的s3_folder设为2024/report/,文件名为sales.pdf,最终文件会存在S3桶的2024/report/sales.pdf路径下,控制台会自动展示出2024 > report的文件夹层级。
(可选)提前创建空文件夹
如果你的场景需要提前创建空的文件夹占位,可以单独调用以下方法:
def create_s3_folder(self, s3_client, folder_path): # 文件夹路径需要以/结尾,否则会被识别为普通文件 if not folder_path.endswith('/'): folder_path += '/' s3_client.put_object(Bucket=AWS_S3_BUCKET, Key=folder_path)
注意事项
- 前缀的
/是S3的层级分隔符,你可以自由拼接多层级路径,比如business/2024/q2/就能生成三级文件夹 - 提前创建文件夹不是必须操作,只要上传时键带对前缀,S3会自动生成对应的层级展示
- 拼接路径时注意不要多写或者漏写
/,避免出现预期外的路径格式
内容的提问来源于stack exchange,提问作者Robin
相关产品推荐
相关产品推荐

