【问题标题】:Display UIImageView using Swift from AWS使用来自 AWS 的 Swift 显示 UIImageView
【发布时间】:2015-11-22 01:25:54
【问题描述】:

我正在尝试使用 Swift 在 UIImageView 中渲染图像。源对象位于 AWS S3 存储桶中。我在 Google 上找不到任何示例代码。因此,我尝试将此链接 [AWS S3 SDK v2 for iOS - Download an image file to UIImage 中给出的代码从 Obj-C 转换为 Swift,但失败了。我是 iOS 的初学者。

        let accessKey = "ACCESS_CODE";
        let secretKey = "SECRET_KEY";
        // let credentialsProvider = AWSStaticCredentialsProvider.credentialsWithAccessKey(accessKey, secretKey: secretKey) 
        // ^ Xcode says - credentialsWithAccessKey is deprecated, use initWithAccessKey 
        let credentialsProvider = AWSStaticCredentialsProvider.initWithAccessKey(accessKey, secretKey: secretKey)
        // ^ Xcode says - AWSStaticCredentialsProvider.Type does not have a member named ‘initWithAccessKey’

我在这里可能做错了很多事情,甚至是愚蠢的错误。最好的帮助是指向一些示例代码。

【问题讨论】:

    标签: ios swift amazon-s3 aws-sdk


    【解决方案1】:

    你有没有这样尝试过

    var credentialsProvider: AWSStaticCredentialsProvider = AWSStaticCredentialsProvider.credentialsWithAccessKey("MY_ACCESS_KEY", secretKey: "MY_SECRET_KEY")
    var configuration: AWSServiceConfiguration = AWSServiceConfiguration.configurationWithRegion(AWSRegionUSWest1, credentialsProvider: credentialsProvider)
    AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration
    var transferManager: AWSS3 = AWSS3(configuration: configuration)
    var getImageRequest: AWSS3GetObjectRequest = AWSS3GetObjectRequest.new()
    getImageRequest.bucket = "MY_BUCKET"
    getImageRequest.key = "MY_KEY"
    transferManager.getObject(getImageRequest).continueWithExecutor(BFExecutor.mainThreadExecutor(), withBlock: {(task: BFTask) -> id in    if task.error {
            NSLog("Error: %@", task.error)
        }
        else {
            NSLog("Got image")
            var data: NSData = task.result.body()
            dispatch_async(dispatch_get_main_queue(), {    
            var image: UIImage = UIImage.imageWithData(data)
            myImageView.image = image
    
            })
    

    【讨论】:

    • 谢谢拉贾特普。这要好得多。虽然 2 行代码给出了错误。上面写着‘var transferManager: AWSS3 = AWSS3(configuration: configuration)’的行报告:‘init(configuration)不可用:使用‘+ registerS3WithConfiguration:forKey:’和‘+ S3ForKey:’代替。第二个错误出现在一行中:“transferManager.getObject ...”。这里“使用未声明的类型‘id’:你的意思是使用‘AnyObject’吗?”。对于第一个错误,我尝试使用 registerS3...,然后使用 S3ForKey,但 S3ForKey 语句 Xcode 报告“Extra argument ‘forKey’ in call.
    • @dato 我放弃了 Swift 的想法,最终使用了 ObjC。要我发布 ObjC 代码吗?
    • @ShirishHirekodi 实际上我成功展示了图像。
    • @dato 可能是您应该将其作为答案发布在这里以造福他人
    【解决方案2】:

    我创建了一个自定义类来下载图像。它对我有用。

    class AWSImageDownloader {
    
        init(AccessKey accessKey:String, SecretKey secretKey:String, andRegion region:AWSRegionType = .USEast1) {
    
            let credentialsProvider = AWSStaticCredentialsProvider(accessKey: accessKey, secretKey: secretKey)
            guard let configuration = AWSServiceConfiguration(region: region, credentialsProvider: credentialsProvider) else {
                debugPrint("Failed to configure")
                return
            }
    
            AWSServiceManager.default().defaultServiceConfiguration = configuration
        }
    
        func downloadImage(Name imageName:String, fromBucket bucketName:String, onDownload successCallback:@escaping AWSImageDownloadSuccess, andOnError errorCallback:@escaping AWSImageDownloadError){
    
            let transferManager     = AWSS3.default()
            let getImageRequest     = AWSS3GetObjectRequest()
            getImageRequest?.bucket = bucketName
            getImageRequest?.key    = imageName
            transferManager.getObject(getImageRequest!).continueWith(executor: AWSExecutor.mainThread()) { (anandt) -> Void in
                if anandt.error == nil {
                    if let imageData = anandt.result?.body as? Data, let image = UIImage(data: imageData) {
    
                        successCallback(image)
                    } else {
                        errorCallback("Download failed")
                    }
                } else {
    
                    let error = "Error \(anandt.error?.localizedDescription ?? "unknown by dev")"
                    errorCallback(error)
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-18
      • 2014-11-29
      • 1970-01-01
      • 2015-10-22
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 1970-01-01
      相关资源
      最近更新 更多