【问题标题】:AWS ios SDK - uploading objects to AWS S3AWS ios SDK - 将对象上传到 AWS S3
【发布时间】:2014-12-02 08:00:59
【问题描述】:

我正在尝试按照“上传对象”下列出的步骤进行操作:http://docs.aws.amazon.com/mobile/sdkforios/developerguide/s3transfermanager.html

但是,我正在将内容转换为 Swift,因为这是我编写整个应用程序的内容。我提出了以下代码,但是当我运行它时,没有任何内容会上传到我指定的存储桶中。不幸的是,我什至没有收到错误,这使得故障排除变得困难 - 您可以在下面看到我正在尝试将任何错误打印到控制台,但 myBFTask.error 最终为空。同时 myBFTask.result 也为空。对于上下文,此代码都在 imagePickerController didFinishPickingMediaWithInfo 中。任何关于下一步看哪里的提示将不胜感激。

        var pickedURL:NSURL = info[UIImagePickerControllerMediaURL] as NSURL
        println("here's the url for the picked media: \(pickedURL)")

        //make a timestamp variable to use in the key of the video I'm about to upload
        let date:NSDate = NSDate()
        var unixTimeStamp:NSTimeInterval = date.timeIntervalSince1970
        var unixTimeStampString:String = String(format:"%f", unixTimeStamp)
        println("this is my unix timestamp as a string: \(unixTimeStampString)")

        var myTransferManagerRequest:AWSS3TransferManagerUploadRequest = AWSS3TransferManagerUploadRequest()
        myTransferManagerRequest.bucket = "kikfli1.videolist"
        myTransferManagerRequest.key = "\(self.fbid)_\(unixTimeStampString)"
        myTransferManagerRequest.body = pickedURL

        var myBFTask:BFTask = BFTask()
        var myMainThreadBFExecutor:BFExecutor = BFExecutor.mainThreadExecutor()
        var myTransferManager:AWSS3TransferManager = AWSS3TransferManager()
        myTransferManager.upload(myTransferManagerRequest).continueWithExecutor(myMainThreadBFExecutor, withBlock: { (myBFTask) -> AnyObject! in
            println("I'm inside the completion block")
            if((myBFTask.result) != nil){
                println("upload was successful?")
            }else{
                println("upload didn't seem to go through..")
                var myError = myBFTask.error
                println("error: \(myError)")
            }
            return nil
        })

这是打印到我的控制台的内容:

用户选择了要提交的视频!

这是所选媒体的网址:file:xxxxxxxxxxxxxxx.MOV(显然是实际文件路径)

这是我作为字符串的 unix 时间戳:1417506382.414219

我在完成块里面

上传似乎没有通过..

错误为零

【问题讨论】:

    标签: ios swift amazon-web-services amazon-s3 bolts-framework


    【解决方案1】:

    您没有将AWSServiceConfiguration 传递给AWSS3TransferManager,这是导致问题的原因。您需要更改以下行:

    var myTransferManager:AWSS3TransferManager = AWSS3TransferManager()
    

    类似

    var myTransferManager:AWSS3TransferManager = AWSS3TransferManager.defaultS3TransferManager()
    

    另外,需要提前将默认服务配置设置为默认服务管理器。

    【讨论】:

    • 成功了!我现在看到了.. 将默认服务配置设置为默认服务管理器是在应用程序委托中使用以下代码完成的: let defaultServiceConfiguration = AWSServiceConfiguration(region: AWSRegionType.USWest1, credentialsProvider: credentialsProvider) AWSServiceManager.defaultServiceManager() .setDefaultServiceConfiguration(defaultServiceConfiguration )
    • 嗨洋介 - 这是你可以权衡的事情吗?我遇到了另一个障碍,我不确定我的方法是否正确.. stackoverflow.com/questions/27266916/…
    【解决方案2】:

    我遇到了类似的问题。应用程序在尝试上传时崩溃并出现致命错误:在展开 Optional 值时意外发现 nil。

    在仔细检查该文件是否存在于路径后,我发现 AWSS3TransferManager 没有被构造,因为我忘记设置默认配置(第 3 行):

    let credentialsProvider = AWSStaticCredentialsProvider(accessKey: AccesKey, secretKey: SecretKey)
    let configuration = AWSServiceConfiguration(region: ServiceRegionType, credentialsProvider: credentialsProvider)
    AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-04
      • 2014-10-11
      • 2017-01-10
      • 2014-05-27
      • 2021-10-27
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      相关资源
      最近更新 更多