【发布时间】:2021-10-28 22:39:33
【问题描述】:
我想从 Ec2 instacne 在 S3 存储桶中创建文件夹。我尝试了 put 对象,但它不起作用。有什么方法可以使用 cli 从 ec2 instace 在 s3 上创建文件夹。
【问题讨论】:
标签: amazon-web-services amazon-s3 aws-cli
我想从 Ec2 instacne 在 S3 存储桶中创建文件夹。我尝试了 put 对象,但它不起作用。有什么方法可以使用 cli 从 ec2 instace 在 s3 上创建文件夹。
【问题讨论】:
标签: amazon-web-services amazon-s3 aws-cli
您无需创建文件夹即可将项目放入其中。例如,只需运行以下命令,s3 将创建文件夹(如果它们不存在):
aws s3 cp ./testfile s3://yourBucketName/any/path/you/like
如果您想递归使用 cp,您可以指定 --recursive 选项,或使用“aws s3 sync”。
如果您的命令不起作用,那么您可能有权限问题。粘贴您的错误,以便我们为您提供帮助。
【讨论】:
aws s3api put-object --bucket bucketname --key foldername/
这个命令就像一个魅力。 感谢 AWS 支持。
【讨论】:
aws s3 sync <folder_name> s3://<you-prefix>/<some_other_folder>/<folder_name>
【讨论】:
请记住,S3 是一个对象存储。它不处理文件夹。
如果您创建 /xyz/ 并上传文件调用 /xyz/foo.txt ,它们实际上是 2 个不同的对象。如果你删除 /xyz/ ,它不会删除 /xyz/foo.txt。
S3 控制台允许您“创建文件夹”,但是在您玩过它之后,您会注意到,您不能重命名文件夹,或者做任何可以玩文件夹的事情(例如移动树结构,递归地指定访问权限)
在 S3 中,有一个叫做“PREFIX”的东西,API 允许您列出/过滤带有特定“前缀”的文件,让您处理抽象。
如上所述,由于您无法执行文件系统文件夹之类的操作,因此如果您想要执行诸如将一个文件夹移动到另一个文件夹之类的任务,您需要编写自己的代码来“重写”文件名(具体来说, 在 S3) 中为“Key”, 即复制到新的对象名并删除旧的对象。
如果您想在 S3 上构建高级控制,您可以选择任何 AWS 开发工具包来执行此操作。 https://aws.amazon.com/tools/
您可以使用 API 函数调用 put_object()(命名因 SDK 语言而异)并证明这些事实(大部分都可以在 AWS 文档中找到)
更新:因为@Tom 提出了这些问题。
您无法使用 AWS cli 创建虚拟文件夹(也许 @Tom 可以展示如何),唯一的方法是使用 AWS SDK put_object()
让我们试试这个 首先我在 shell 中创建虚拟文件
echo "dummy">test.txt
那就试试用python aws sdk
import boto3
s3=boto3.client("s3")
s3.create_bucket(Bucket="dummy")
# now create so call xyz/ "empty virtual folder"
s3.put_object(Bucket="dummy", Key="xyz/")
# now I put above file name to S3 , call xyz/test.txt
# First I must open the file, because put_object only take bytes or file object
myfile=open("test.txt")
s3.put_object(Bucket="dummy", Key="xyz/test.txt")
现在,转到您的命令外壳,启动您的 AWS CLI(或继续使用 boto3)
# check everything
aws s3 ls s3://dummy --recursive
#now delete the so call "folder"
aws s3 rm s3://dummy/xyz/
# And you see the file "xyz/test.txt" is still there
aws s3 s3://dummy --recursive
【讨论】:
您可以在 AWS 官方博客中找到命令:
http://docs.aws.amazon.com/cli/latest/userguide/using-s3-commands.html
还有其他不同的工具可用于在 S3 中创建 Bucket/ 文件夹。已知工具之一是可用于 Windows 服务器的 S3Browser。将其安装在您的 EC2 实例上并提供您的 AWS 访问密钥和秘密密钥以访问 S3。这个工具提供了简单的用户界面来做到这一点。
【讨论】:
没有 cli 命令可让您简单地在 s3 存储桶中创建文件夹。要创建此文件夹,我将使用以下命令,该命令会创建一个空文件,其中没有任何内容。但是如果你删除文件,只要你之后没有添加任何其他内容,你就会删除该文件夹
aws s3api put-object --bucket bucket_name --key folder_name/empty.csv
【讨论】: