我想使用编码在我的amazon s3存储桶中添加文件夹。 你能告诉我如何实现这个目标吗?
答案 0 :(得分:43)
Amazon S3中没有文件夹。只是大多数可用的S3浏览器工具都显示了由斜杠作为文件夹分隔的键名的一部分。
如果你真的需要,可以在末尾用斜杠创建一个空对象。例如“folder /”如果您使用GUI工具和AWS控制台打开它,它将看起来像一个文件夹。
答案 1 :(得分:17)
使用AWS SDK的Java:
s3中没有文件夹,只有键/值对。密钥可以包含斜杠(/
),这将使其在管理控制台中显示为文件夹,但从编程方面来说,它不是文件夹,而是字符串值。
如果您尝试构建s3存储桶,那么您的命名约定(您提供文件的密钥)可以简单地遵循正常的目录模式,即folder/subfolder/file.txt
。
搜索时(取决于您使用的语言),您可以使用分隔符搜索前缀。在Java中,它将是listObjects(String storageBucket, String prefix, String delimiter)
方法调用。
storageBucket
是您的广告素材的名称,prefix
是您要搜索的密钥,delimiter
用于根据{{1}过滤您的搜索}。
答案 2 :(得分:16)
正如大家告诉你的那样,在AWS S3中没有任何“文件夹”,你错误地想到了它们。 AWS S3具有“对象”,这些对象看起来像文件夹,但它们并不是真正的文件夹。如果您在Amazon AWS S3上寻找创建文件夹,您将无法找到很多好结果。
有一种方法可以创建“文件夹”,因为您可以在S3上创建模拟文件夹结构,但再次,围绕您在S3中创建对象而不是文件夹的事实。与此同时,您将需要命令“put-object”来创建此模拟文件夹结构。现在,为了使用此命令,您需要安装AWS CLI工具,请访问AWS CLI Installation以获取安装它们的说明。
命令是这样的:
aws s3api put-object --bucket your-bucket-name --key path/to/file/yourfile.txt --body yourfile.txt
现在,关于此命令的有趣部分是,在运行此命令之前,不需要创建所有“文件夹”(对象)。这意味着您可以使用“文件夹”(对象)来包含内容,但是您可以使用此命令在该“文件夹”(对象)中创建模拟文件夹结构,如前所述。例如,我的S3存储桶中有一个名为“importer”的“文件夹”(对象),假设我想在年份,月份的“文件夹”(对象)结构中插入sample.txt,然后是样本“所有文件夹中的“(对象)”。
如果我的存储桶中只有“importer”对象,则在运行此命令之前,我不需要事先进入创建年,月和样本对象(“文件夹”)。我可以像这样运行这个命令:
aws s3api put-object --bucket my-bucket-here --key importer/2016/01/sample/sample.txt --body sample.txt
然后put-object命令进入并创建我在--key标志中指定的路径。这里有点宝石:即使您没有要上传到S3的文件,您仍然可以在S3存储桶中创建对象(“文件夹”),例如,我创建了一个shell脚本来“创建文件夹”在桶中,通过省略--body标志,而不指定文件名,并在--key标志中提供的路径末尾留下斜杠,系统在S3桶中创建所需的模拟文件夹结构没有在过程中插入文件。
希望这有助于您更好地理解系统。
注意:一旦创建了“文件夹”结构,就可以使用S3的“sync”命令将后代“文件夹”与本地计算机上的文件夹同步,甚至与另一个S3存储桶同步。
答案 3 :(得分:9)
AWS:S3 rails gem本身就是这样做的:
AWS::S3::S3Object.store("teaser/images/troll.png", file, AWS_BUCKET)
如果它们尚不存在,将自动创建teaser
和images
“文件夹”。
答案 4 :(得分:5)
在iOS(Objective-C)中,我按照以下方式进行了
您可以添加以下代码,以编程方式在amazon s3存储桶中创建一个文件夹。这是有效的代码片段。任何建议欢迎。
[A-Z]
答案 5 :(得分:4)
使用aws cli,可以将整个文件夹复制到存储桶中。
aws s3 cp /path/to/folder s3://bucket/path/to/folder --recursive
还可以使用aws s3 sync
答案 6 :(得分:3)
使用AWS SDK .Net可以很好地工作,只需在名称文件夹的末尾添加“/”:
var folderKey = folderName + "/"; //end the folder name with "/"
AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(AWSAccessKey, AWSSecretKey);
var request = new PutObjectRequest();
request.WithBucketName(AWSBucket);
request.WithKey(folderKey);
request.WithContentBody(string.Empty);
S3Response response = client.PutObject(request);
然后刷新您的AWS控制台,您将看到文件夹
答案 7 :(得分:2)
对于Swift,我创建了一个方法,您可以为文件夹名称传递from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
import time
Builder.load_string('''
<CameraClick>:
orientation: 'vertical'
Camera:
id: camera
resolution: (640, 480)
play: False
ToggleButton:
text: 'Play'
on_press: camera.play = not camera.play
size_hint_y: None
height: '48dp'
Button:
text: 'Capture'
size_hint_y: None
height: '48dp'
on_press: root.capture()
''')
class CameraClick(BoxLayout):
def capture(self):
'''
Function to capture the images and give them the names
according to their captured time and date.
'''
camera = self.ids['camera']
timestr = time.strftime("%Y%m%d_%H%M%S")
camera.export_to_png("IMG_" + timestr)
print("Captured")
class TestCamera(App):
def build(self):
return CameraClick()
TestCamera().run()
。
斯威夫特3:
String
然后致电
import AWSS3
func createFolderWith(Name: String!) {
let folderRequest: AWSS3PutObjectRequest = AWSS3PutObjectRequest()
folderRequest.key = Name + "/"
folderRequest.bucket = bucket
AWSS3.default().putObject(folderRequest).continue({ (task) -> Any? in
if task.error != nil {
assertionFailure("* * * error: \(task.error?.localizedDescription)")
} else {
print("created \(Name) folder")
}
return nil
})
}
答案 8 :(得分:1)
在这里,您可以通过代码/ cli实现所需的内容:
--create/select the file (locally) which you want to move to the folder:
~/Desktop> touch file_to_move
--move the file to s3 folder by executing:
~/Desktop> aws s3 cp file_to_move s3://<path_to_your_bucket>/<new_folder_name>/
将在s3存储桶上创建一个新文件夹,您现在可以执行cp,mv,rm ...语句,即照常管理文件夹。
如果不需要上面创建的这个新文件,只需将其删除。现在,您已经创建了一个s3存储桶。
答案 9 :(得分:0)
您可以从可用的AWS SDK
中选择您选择的语言或者,您可以尝试在Python,Go,.Net,Java,Javascript中为您的应用程序开发环境提供的minio客户端库,它有示例列出所有基本操作的目录。
免责声明:我为Minio
工作答案 10 :(得分:0)
在swift 2.2中,您可以使用
创建文件夹yourViewPager.setOffScreenPagingLimt=2;
答案 11 :(得分:0)
下面创建一个名为“mydir1”的空目录。
下面是nodejs代码,它应该与其他语言类似。
诀窍是在对象名称末尾加斜杠(/),如“mydir1 /”,否则将创建名为“mydir1”的文件。
let AWS = require('aws-sdk');
AWS.config.loadFromPath(__dirname + '\\my-aws-config.json');
let s3 = new AWS.S3();
var params = {
Bucket: "mybucket1",
Key: "mydir1/",
ServerSideEncryption: "AES256" };
s3.putObject(params, function (err, data) {
if (err) {
console.log(err, err.stack); // an error occurred
return;
} else {
console.log(data); // successful response
return;
/*
data = {
ETag: "\"6805f2cfc46c0f04559748bb039d69ae\"",
ServerSideEncryption: "AES256",
VersionId: "Ri.vC6qVlA4dEnjgRV4ZHsHoFIjqEMNt"
}
*/
} });
来源:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property
答案 12 :(得分:0)
按顺序在s3存储桶中创建一个目录并复制内容非常简单。
可以使用S3命令: aws s3 cp abc / def.txt s3:// mybucket / abc /
注意:/必须创建目录,否则它将成为s3中的文件。
答案 13 :(得分:0)
这是一个分歧性的话题,因此这是2019年AWS S3控制台的屏幕快照,用于添加文件夹和注释:
创建文件夹时,S3控制台将使用上述内容创建一个对象 名称后缀“ /”,该对象显示为文件夹 在S3控制台中。
然后“使用编码”,您只需在有效的文件夹名称字符串和正斜杠之前加上前缀,即可简单地调整对象名称。
答案 14 :(得分:0)
我猜您的查询只是在folder(子文件夹)内创建一个文件夹。 因此,在处理bucket子文件夹内的任何目录数据时,请使用如下命令。
aws s3 cp mudit s3:// mudit-bucket / Projects-folder / mudit-subfolder-递归
它将创建一个子文件夹并将您的目录内容放入其中。同样,一旦您的子文件夹数据为空。您的子文件夹将自动被删除。
答案 15 :(得分:0)
复制文件时,可以使用复制命令创建文件夹。
aws s3 cp test.xml s3://mybucket/myfolder/test.xml