amazon-web-services - 删除 S3 上不存在的文件会删除该文件夹(如果该文件夹是最后一个文件)。我们如何防止这种情况发生?
问题描述
所以,我在 S3 上有以下结构:
主桶
- 数据源/
- 陈述/
我们遇到了DataFeeds/
文件夹被删除的事件!所以,我测试了以下内容:
aws s3api put-object --bucket mainbucket --key DataFeeds/.donotdelete
但是,如果我执行此操作(blah.txt
即使它不存在也删除)该DataFeeds/
文件夹也会被删除:
aws s3 rm s3://mainbucket/DataFeeds/blah.txt
那么,我们如何防止文件夹被删除S3
呢?
使用的版本:
aws-cli/2.2.46 Python/3.9.7 Darwin/20.6.0 source/x86_64 prompt/off
解决方案
Amazon S3 中不存在文件夹。它是一种“平面”存储服务,其中Key
对象的(文件名)包括完整路径,包括目录。
Amazon S3 将为您“模拟”文件夹。例如,如果您将文件上传到invoices/january.txt
,那么该invoices
目录将“神奇地”出现。如果您随后删除该对象,则该目录将“消失”。这是因为它从未真正存在过。
如果您使用 S3 管理控制台中的创建文件夹按钮,它将创建一个与目录同名的零长度对象。这将“强制”目录出现在存储桶列表中。如果没有具有相同前缀(路径)的对象,删除零长度对象将导致目录消失。
使用 S3 的最佳建议是假装文件夹存在。您可以将对象放置在任何路径中,并且(假装)目录将神奇地出现。不要担心目录会消失,因为它们实际上从未存在过!
如果您确实需要空目录,请使用创建文件夹按钮来创建零长度对象。它会一直存在,直到您删除零长度对象。
推荐阅读
- android - CoroutineScope - CompletableDeferred 取消
- html - 网格单元后的额外空间,不知道它来自哪里
- docker - Dockerfile 入口点与 docker-compose 上下文冲突
- c++ - 阻塞信号导致升压过程不起作用
- android - 关于2019年4月11日之后GCM实现Android应用(GCM废止)
- java - 列表内的地图,想要检索所有地图并将其值存储到另一个列表
- excel - Excel VBA - 在检测到单元格值变化时调用函数的最佳实践
- python-3.x - Django 函数返回 MongoDB 聚合管道的结果
- php - 使用 preg_grep 查找匹配项
- intellij-idea - 如何在 IntelliJ Live Template 内部使用?