如何用Python向名称含斜杠的S3桶上传文件?
问题分析
首先明确:AWS S3桶的名称不允许包含斜杠(/),报错信息里的正则规则已经明确了桶名只能由字母、数字、点、连字符、下划线组成。不存在名为waterbucket/sample的S3桶,你实际想要的应该是在waterbucket桶下,将文件写入sample前缀(即S3控制台显示的"文件夹"路径)。
修正后的Python脚本
先修正原脚本里的几处错误:
pathLib拼写错误,应为小写的pathlib- 移除多余的
folder.format(bucket_name)调用,直接使用桶名即可 - 将对象键(object_name)设置为包含前缀的路径,即
sample/file.json
修正后的代码:
import boto3 import os import pathlib import logging # 初始化S3资源 s3 = boto3.resource("s3") bucket_name = "waterbucket" # 对象键包含前缀路径,相当于写入waterbucket桶下的sample路径下 object_name = "sample/file.json" # 获取本地文件的绝对路径 file_name = os.path.join(pathlib.Path(__file__).parent.resolve(), "file.json") # 执行上传:桶名为waterbucket,对象键带前缀路径 s3.meta.client.upload_file(file_name, bucket_name, object_name)
关键说明
- S3里的"文件夹"本质是对象键的前缀,没有真实的文件夹结构。比如
sample/file.json这个对象键,在S3控制台会显示为sample文件夹下的file.json,但实际是一个独立存储的对象。 - 无需手动创建
sample前缀,上传带该前缀的对象时,S3会自动在控制台生成对应的路径显示。
内容的提问来源于stack exchange,提问作者John Wick
相关产品推荐
相关产品推荐

