AWS ios SDK - 将对象上传到AWS S3

时间:2014-12-02 08:00:59

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

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

然而,我正在将事情转换为Swift,因为这就是我的整个应用程序所写的内容。我已经提出了以下代码,但是当我运行它时,没有任何内容被上传到我指定的存储桶。不幸的是我甚至没有得到错误,这使得很难排除故障 - 你可以在下面看到我正在尝试将任何错误打印到控制台,但myBFTask.error最终为空。同时myBFTask.result也为null。对于上下文,此代码全部位于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
        })

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

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

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

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

我在完成块内

上传似乎没有通过..

错误无

2 个答案:

答案 0 :(得分:2)

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

var myTransferManager:AWSS3TransferManager = AWSS3TransferManager()

类似

var myTransferManager:AWSS3TransferManager = AWSS3TransferManager.defaultS3TransferManager()

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

答案 1 :(得分:2)

我有类似的问题。当尝试上传时发生致命错误,应用程序崩溃:在展开Optional值时意外发现nil。

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

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