python-2.7 - 使用 boto3 将文件上传到 S3 存储桶中的特定文件夹
问题描述
我的代码正在运行。我面临的唯一问题是我无法在 S3 存储桶中指定要放置文件的文件夹。这是我所拥有的:
with open("/hadoop/prodtest/tips/ut/s3/test_audit_log.txt", "rb") as f:
s3.upload_fileobj(f, "us-east-1-tip-s3-stage", "BlueConnect/test_audit_log.txt")
解决方案
@danimal 的解释几乎涵盖了所有内容。如果您只想在 s3 中创建一个类似文件夹的对象,您可以简单地指定该文件夹名称并以“/”结尾,这样当您从控制台查看它时,它看起来就像一个文件夹。
它相当没用,一个空对象,没有主体(将其视为具有空值的键)只是为了吸引眼球,但如果你真的想这样做,你可以。1)您可以在控制台上以交互方式创建它,因为它为您提供了该选项 2_您可以使用 aws sdk。boto3 有用于 s3 客户端的 put_object 方法,您可以在其中将键指定为“your_folder_name/”,请参见下面的示例:
import boto3
session = boto3.Session() # I assume you know how to provide credentials etc.
s3 = session.client('s3', 'us-east-1')
bucket = s3.create_bucket('my-test-bucket')
response = s3.put_object(Bucket='my-test-bucket', Key='my_pretty_folder/' # note the ending "/"
你有你的桶。
同样,当您上传文件时,您指定“my-test-bucket/my_file”,您所做的是创建一个名为“my-test-bucket/my_file”的“ key ”并将文件的内容作为它的“价值”。
在这种情况下,存储桶中有 2 个对象。第一个对象的主体为空,看起来像一个文件夹,而第二个对象看起来像在里面,但正如@danimal 指出的那样,实际上您在同一平面层次结构中创建了 2 个键,它只是“看起来像”我们使用的在文件系统中查看。
如果您删除该文件,您仍然有其他对象,所以在 aws 控制台上,看起来文件夹仍然存在,但里面没有文件。
如果您跳过创建文件夹并像以前那样简单地上传文件,您仍会在 AWS 控制台中看到文件夹结构,但此时您只有一个对象。
但是,当您从命令行列出对象时,您会看到一个对象,如果您在控制台上删除它,它看起来文件夹也不见了。
推荐阅读
- r - 自定义ggplot中y轴标签的顺序
- python - 我的代码正在将与该用户相关的每个对象添加到具有多对多关系的模型中
- c# - C# Singleton - 使用异步等待触发并忘记
- javascript - 同一页面上的多个值计数器
- azure - 根据共享映像库上可用的自定义映像部署 Azure VM
- c++ - 无法构建 MATIO 库
- r - 更改标签字体大小,但也更改了使用 ggtext 时的 x axia 标签顺序
- java - jpackage 在 Windows 10 和 JDK 16 上不起作用
- python - 我想根据标记分离数据框然后下载
- css - 你能@import默认的css变量吗?(特别是,我将使用@use)