我想从Ec2 instacne创建S3存储桶中的文件夹。我尝试了put对象,但它不起作用。有没有办法使用cli从ec2 instace在s3上创建文件夹。
答案 0 :(得分:30)
您无需创建文件夹即可将项目放入其中。例如,只需运行类似下面命令的内容,如果文件夹不存在,s3将创建文件夹:
aws s3 cp ./testfile s3://yourBucketName/any/path/you/like
如果要递归使用cp,可以指定--recursive选项,或使用“aws s3 sync”。
如果您的命令不起作用,那么您可能会遇到权限问题。粘贴您的错误,以便我们为您提供帮助。
答案 1 :(得分:10)
aws s3api put-object --bucket bucketname --key foldername/
此命令就像魅力一样。 礼貌的AWS支持。
答案 2 :(得分:2)
您可以在AWS官方博客中找到这些命令:
http://docs.aws.amazon.com/cli/latest/userguide/using-s3-commands.html
还有其他不同的工具可用于在S3中创建Bucket /文件夹。其中一个已知的工具是S3Browser,可用于Windows服务器。将其安装在EC2实例上,并提供AWS访问密钥和密钥以访问S3。该工具提供了简单的用户界面。
答案 3 :(得分:2)
请记住,S3是一个对象存储。它没有处理文件夹。
如果您创建/ xyz /并上传文件调用/xyz/foo.txt,那么这些实际上是2个不同的对象。如果你删除/ xyz /,它将不会删除/xyz/foo.txt。
S3控制台允许您创建文件夹",但是在玩它之后,你会注意到,你不能重命名文件夹,或者做任何可以玩文件夹的东西(比如移动树形结构) ,递归地指定访问权限)
在S3中,有一些电话" PREFIX" API允许您使用特定的"前缀"列出/过滤文件,以便您处理抽象。
如上所述,由于您不能执行任何类似文件系统文件夹的操作,如果您要执行将一个文件夹移动到另一个文件夹的任务,您需要编写自己的代码来重写"重写"文件名(具体来说,它是"键"在S3中),即将其复制到新对象名称并删除旧对象。
如果您想在S3上构建高级控制,您可以选择任何AWS SDK来执行此操作。 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")
现在,转到命令shell,启动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
答案 4 :(得分:1)
aws s3 sync <folder_name> s3://<you-prefix>/<some_other_folder>/<folder_name>
答案 5 :(得分:0)
没有cli命令可让您简单地在s3存储桶中创建文件夹。要创建此文件夹,我将使用以下命令,该命令将创建一个空文件,里面没有任何内容。但是,如果您删除文件,只要之后没有添加其他任何内容,就会删除该文件夹
aws s3api放置对象--bucket bucket_name --key folder_name / empty.csv