我看到有AWS::S3::S3Object.rename
,但我无法使用文件夹:
AWS::S3::Base.establish_connection!(
:access_key_id => APP_CONFIG[:s3_access_key_id],
:secret_access_key => APP_CONFIG[:s3_secret_access_key]
)
AWS::S3::S3Object.rename(
"assets/old_name_folder",
"assets/new_name_folder",
APP_CONFIG[:s3_bucket]
)
old_name_folder 包含文件和文件夹,我希望重命名以尊重这一点。
我获得了:AWS::S3::NoSuchKey (The specified key does not exist.)
我不知道我做错了什么,或者只是无法重命名 s3文件夹。
答案 0 :(得分:27)
documentation for AWS::S3很好地解释了这一点。在s3上存储文件时,没有文件夹这样的东西。有一个桶(大概是你的APP_CONFIG[:s3_bucket]
),还有一些物品。这就对了。没有文件夹。您的一个对象可能被命名为/files/public/system/whatever/derp.jpg
- 但是那里没有文件夹,只有一个名称看起来像路径的对象,然后是对象的值(驻留在该位置的实际文件)。 / p>
所以要回答你的问题,你不能重命名文件夹,因为在s3上没有这样的东西。您必须重命名单个对象。
答案 1 :(得分:2)
您可以将对象从一个s3:// [path_1]复制到另一个s3:// [path_2] 通过AWS控制台 https://docs.aws.amazon.com/cli/latest/reference/s3/mv.html
在差异存储桶之间移动对象的示例:
aws s3 mv s3://[s3-name1]/folder1 s3://[s3-name2]/[folder2] --recursive
或同一s3
aws s3 cp s3://[s3-name1]/folder1 s3://[s3-name1]/[folder2] --recursive
答案 2 :(得分:0)
在S3存储桶中重命名文件夹的最简单方法是打开AWS CLI https://docs.aws.amazon.com/cli/latest/userguide/或AWS Cloud Shell https://aws.amazon.com/cloudshell/
AWS云外壳的好处是无需配置,CloudShell已通过您的控制台凭证进行了预认证。 (注意-该服务昨天启动)
aws s3-递归mv s3:/// <文件夹名称自> s3:/// <文件夹名称至>
请参见下面的示例,在该示例中,我将文件夹“ firstname”的名称更改为“ first”文件夹。另外,此命令还将新文件夹中的所有对象从旧文件夹中移出。
答案 3 :(得分:0)
您不能这样做,因为 AWS 为每个请求定价。所以他们想要更多的行动。重命名文件夹或删除将不起作用。在您必须移动/删除等所有文件之前。