Swift 列出AWS S3 bucket中的所有对象
我试图找出如何在Swift中列出AWS S3存储桶中的所有对象。我似乎在互联网上的任何地方都找不到这些信息,但可能是我找得不够仔细。如果有人能让我参考允许我这样做的代码,那就太好了。不知道您是否还需要它,但现在您可以开始了:Swift 列出AWS S3 bucket中的所有对象,swift,amazon-web-services,amazon-s3,bucket,Swift,Amazon Web Services,Amazon S3,Bucket,我试图找出如何在Swift中列出AWS S3存储桶中的所有对象。我似乎在互联网上的任何地方都找不到这些信息,但可能是我找得不够仔细。如果有人能让我参考允许我这样做的代码,那就太好了。不知道您是否还需要它,但现在您可以开始了: let credentialsProvider = AWSStaticCredentialsProvider(accessKey: "ACCESS KEY", secretKey: "SECRET KEY") let configuration = AWSServi
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
}
(感谢Daniel提醒我不要使用不推荐的代码);) Jan Dawid的答案很好-但是,如果你不想让你的Bucket公开给所有人,并且仍然可以获得对象列表,那么你必须做更多的事情(特别是在AWS设置中)来实现这一点(请参阅下面的事情列表…) 或者换句话说,您如何使Swift中列出的所有对象将您的存储桶设置为公共限制,如图所示(即,无公共访问权) 有一种方法可以在Swift中实现,而无需在应用程序中设置AWS用户登录: 创建iOS应用程序或打开希望bucket对象列表显示的应用程序: 键入以下代码:
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
}
(当然,你需要做一些化妆品来处理不应该出现结果的情况——但这由你决定
请确保已导入AWSS3:
import AWSS3
之后,您需要在AWS服务页面中执行一整套步骤,以便代码真正检索所需的bucket objects列表。以下是一个分步指导:
大致上,请执行以下操作:
身份池
(即提供一个名称-不要忘记标记“启用对未经身份验证身份的访问”(您可以查看详细信息并保持不变)->按允许eu-central-1:368293ad-f278-35ae-2678-6d40d48de2g5
(请确保记下此id)ARN:aws:iam::274937169435:Role/Cognito_youridpoolnameunath_Role
)S3 Bucket Policy
作为类型
12b.选择效果Allow
12c.在prinicpal字段中,粘贴您在步骤10中获得的角色ARN(类似于ARN:aws:iam::274937169435:Role/Cognito_youridpoolnameunath_Role
)
12d.Amazon服务字段应为Amazon S3
(取消选择离开标记)
12e.操作应该是ListObjects
(或者listBucket
,具体取决于您想做什么…)
12f.亚马逊资源名称(ARN)应该是ARN:aws:s3:::您的_BUCKET_Name
(如果您希望存储桶中的所有文件最终都列在Swift中,请留空>
12g.按添加语句按钮
12h.按创建策略按钮(该按钮应生成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"
]
}
}
]
}
<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>
AWS
证书提供者
同源性
违约
普利德
eu-central-1:368293ad-f278-35ae-2678-6d40d48de2g5
区域
欧盟-中央-1
S3TransferUtility
违约
区域
欧盟-中央-1
帮了大忙-谢谢!(不要忘了区域
!!与两个键一样重要-当然还有桶名)。一个问题:提供的解决方案是否真的有