Inf*_*911 2 amazon-s3 bucket amazon-web-services swift
我试图找出如何在Swift中列出AWS S3存储桶中的所有对象.我似乎无法在互联网上找到任何信息,但也许我看起来不够努力.如果有人可以推荐我的代码,这将允许我做这将是伟大的.
Jan*_*odt 11
不知道你是否仍然需要它但是你去了:
let credentialsProvider = AWSStaticCredentialsProvider(accessKey: "ACCESS KEY", secretKey: "SECRET KEY")
let configuration = AWSServiceConfiguration(region: .USWest2, credentialsProvider: credentialsProvider)
AWSS3.registerS3WithConfiguration(configuration, forKey: "defaultKey")
let s3 = AWSS3.S3ForKey("defaultKey")
let listRequest: AWSS3ListObjectsRequest = AWSS3ListObjectsRequest()
listRequest.bucket = "BUCKET"
s3.listObjects(listRequest).continueWithBlock { (task) -> AnyObject? in
print("call returned")
let listObjectsOutput = task.result;
for object in (listObjectsOutput?.contents)! {
print(object.key)
}
return nil
}
Run Code Online (Sandbox Code Playgroud)
(感谢Daniel提醒我不要使用弃用的代码);)
Jan-Dawid的答案很好-但是,如果您不希望每个用户都可以公开使用Bucket,并且仍然获得对象列表,则必须做更多的事情(尤其是在AWS设置中)才能做到(请参阅列表)您必须在下面做的事情...)。
换句话说,如何获得Swift中列出的所有对象,并将您的存储桶设置为公开限制(如该图像所示)(即,无公共访问权限)
您可以通过一种方法在Swift中执行此操作,而无需在应用程序中进行AWS用户登录设置:
创建一个iOS应用或打开一个您想要显示存储桶对象列表的应用:
输入以下代码:
let myIdentityPoolId = "eu-central-1:368293ad-f278-35ae-2678-6d40d48de2g5"
let credentialsProvider:AWSCognitoCredentialsProvider = AWSCognitoCredentialsProvider(regionType: .YOUR_REGION, identityPoolId: myIdentityPoolId)
let configuration = AWSServiceConfiguration(region: .YOUR_REGION, credentialsProvider:credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = configuration
AWSS3.register(with: configuration!, forKey: "defaultKey")
let s3 = AWSS3.s3(forKey: "defaultKey")
let listRequest: AWSS3ListObjectsRequest = AWSS3ListObjectsRequest()
listRequest.bucket = "YOUR_BUCKET_NAME"
s3.listObjects(listRequest).continueWith { (task) -> AnyObject? in
for object in (task.result?.contents)! {
print("Object key = \(object.key!)")
}
return nil
}
Run Code Online (Sandbox Code Playgroud)
(当然,您需要做一些化妆品来处理不会出现任何结果的情况-但我将视您情况而定。
确保确保已导入AWSS3:
import AWSS3
Run Code Online (Sandbox Code Playgroud)
之后,您需要在AWS Service页面中执行一整套步骤,以使您的代码真正检索所需的存储对象列表。这是分步指导:
大致执行以下操作:
(顺便说一句,最好在AWS服务页面找到所有这些AWS 主页,然后在搜索栏中输入单词“ Cognito”或“ IAM”或“ S3”。这三个都是您所需要的)
但是,让我们继续。
在“管理联合身份”中,创建一个新identity pool名称(即提供名称-并且不要忘记标记“启用对未经身份验证的身份的访问”)(您可以查看详细信息并将其保留不变)->按“允许”!
小小额外:如果您弄乱了任何东西并想重新启动:上面的步骤Nr.6再次使用相同的名称可能无法正常工作。在这种情况下,我建议转到“ IAM”主页,然后删除连接到您的身份池的2个角色(即IAM主页中的“角色”下)。删除角色后,您可以重新创建身份池!)
第二点:额外的工作,请在此处进行所有操作,请确保您的所有AWS主服务页面都位于同一地区!(通常,AWS网页以https:// eu-central-1或 https:// us-west2等开头。确保它们在整个过程中保持一致!
但是,让我们继续:
创建标识池后,您应该为其获取一个ID(例如:(eu-central-1:368293ad-f278-35ae-2678-6d40d48de2g5请确保记下该ID))
在“ IAM”主页面的“角色”菜单下,您找到2个角色(由步骤5-8创建)-单击“取消身份验证”中的两个(您看到其中有一个“身份验证”和“取消身份验证”之一)。
单击“取消身份验证”后,您会进入“摘要”页面:在此处请注意Role ARN(类似arn:aws:iam::274937169435:role/Cognito_YOURIDPOOLNAMEUnauth_Role)
保留您的ID,然后转到AWS-Policy-Generator页面。
在那里,开始填写“策略生成器”表单:
12a。选择S3 Bucket Policy作为类型
12b。选择效果Allow
12c。在Prinicpal字段中,粘贴您在步骤10中获得的Role-ARN(类似arn:aws:iam::274937169435:role/Cognito_YOURIDPOOLNAMEUnauth_Role)
12天 “亚马逊服务”字段应为Amazon S3(取消选择标记)
12e。动作应该是ListObjects(或ListBuckets取决于您想做什么...)
12楼 亚马逊资源名称(ARN)应该是arn:aws:s3:::YOUR_BUCKET_NAME
(如果您希望存储桶中的所有文件最终都列在Swift中,请保留空白>
12克 按添加语句按钮
12小时 按下[建立政策]按钮(应该会产生JSON档案)
像这样:
{
"Id": "Policy2846208763429",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt98475983711245435",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::YOUR_BUCKET_NAME",
"Principal": {
"AWS": [
"arn:aws:iam::274937169435:role/Cognito_YOURIDPOOLNAMEUnauth_Role"
]
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
拥有此Policy JSON文件后,返回“ S3”存储桶主页
在“ S3”主页内,转到->“权限”,然后按“ Bucket Policy”标签
替换在“存储桶策略”标签的编辑器窗口中写入的所有内容,然后粘贴您的Policy-JSON文件(来自步骤12h。)
粘贴JSON后,请确保按“保存”
--->我们在这里!SWFIT代码现在应该在返回任务答案中检索所有存储桶文件!!!!
如果只想获取存储桶的对象列表,则实际上不需要步骤Nr17。
<key>AWS</key>
<dict>
<key>CredentialsProvider</key>
<dict>
<key>CognitoIdentity</key>
<dict>
<key>Default</key>
<dict>
<key>PoolId</key>
<string>eu-central-1:368293ad-f278-35ae-2678-6d40d48de2g5</string>
<key>Region</key>
<string>eu-central-1</string>
</dict>
</dict>
</dict>
<key>S3TransferUtility</key>
<dict>
<key>Default</key>
<dict>
<key>Region</key>
<string>eu-central-1</string>
</dict>
</dict>
</dict>
Run Code Online (Sandbox Code Playgroud)