首页 > 解决方案 > 如何在 iOS SWIFT 中显示来自 AWSS3 存储桶的完整图像?

问题描述

我正在使用以下代码从 AWS S3 存储桶下载图像列表并显示在 tableView 中。我尝试了很多解决方案,但没有用。

func listS3Objects() {
    let credentialsProvider = AWSCognitoCredentialsProvider(regionType:.USEast2, identityPoolId:identityID)
    let configuration = AWSServiceConfiguration(region:.USEast2, credentialsProvider:credentialsProvider)

    AWSServiceManager.default().defaultServiceConfiguration = configuration

    AWSS3.register(with: configuration!, forKey: "defaultKey")
    let s3 = AWSS3.s3(forKey: "defaultKey")

    let listRequest: AWSS3ListObjectsRequest = AWSS3ListObjectsRequest()
    listRequest.bucket = bucketName

    s3.listObjects(listRequest).continueWith { (task) -> AnyObject? in
        print("Object result = \(task.result)")

        print("Object contents = \(task.result?.contents)")
        for object in (task.result?.contents)! {

            print("Object key = \(object.key!)")
            self.imagesArray.append(object)
        }

        DispatchQueue.main.async {
            self.ImageList_Table.reloadData()
        }
        return nil
    }
}

标签: iosswiftamazon-s3

解决方案


关于文档,亚马逊建议在开发应用程序时使用较新的版本 ListObjectsV2 。

示例请求可能如下所示

let listObjectsRequest = AWSS3ListObjectsV2Request()
listObjectsRequest?.bucket = "your bucket"
//listObjectsRequest?.prefix = prefix. //If you want to have a prefix
//listObjectsRequest?.delimiter = delimiter //If you want to have a delimiter
AWSS3.default().listObjectsV2(listObjectsRequest!) { (output, error) in
  if let error = error{
     print(error)
  }
  if let output = output{
     print(output)
  }

注意:要在 AWS Identity and Access Management (IAM) 策略中使用此操作,您必须有权执行 s3:ListBucket 操作


推荐阅读