我看到有一个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文件夹 *。
4条答案
按热度按时间nc1teljy1#
documentation for AWS::S3很好地解释了这一点。当在s3上存储文件时,没有文件夹之类的东西。有一个桶(大概是你的
APP_CONFIG[:s3_bucket]
),有对象。就是这样。没有文件夹。你的一个对象可能被命名为/files/public/system/whatever/derp.jpg
-但那里没有文件夹,只有一个名称看起来像路径的对象,然后是对象的值(驻留在该位置的实际文件)。所以回答你的问题,你不能重命名文件夹,因为在s3上没有这样的东西。你必须重命名单个对象。
2o7dmzc52#
您可以通过AWS控制台将对象从一个
s3://[path_1]
复制到另一个s3://[path_2]
。https://docs.aws.amazon.com/cli/latest/reference/s3/mv.html在不同存储桶之间移动对象的示例:
字符串
或在相同的S3中
型
y53ybaqx3#
在S3存储桶中重命名文件夹的最简单方法是打开AWS CLI https://docs.aws.amazon.com/cli/latest/userguide/或AWS Cloud Shell https://aws.amazon.com/cloudshell/
使用AWS Cloud Shell的好处是无需配置,CloudShell已使用您的控制台凭据进行预身份验证。(注意-此服务于昨天推出)
aws s3 --recursive mv s3:<folder_name_from>/ s3:/<folder_name_to>
请看下面的例子,我将文件夹的名称“firstname”更改为“first”folder。此外,此命令将旧文件夹中的所有对象移动到新文件夹中。
x1c 0d1x的数据
jslywgbw4#
你不能这样做,因为AWS为每个请求定价。所以他们想要更多的行动。删除文件夹或删除将不起作用。在此之前,你必须移动/删除等所有文件。