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

我试图按照“上传对象”下列步骤操作: 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 }) 

这是什么打印到我的控制台:

用户select了一个video提交!

这里是挑选的媒体的url:文件:xxxxxxxxxxxxxxx.MOV(显然是一个实际的文件path)

这是我的unix时间戳作为string:1417506382.414219

我在完成块内

上传似乎没有通过..

错误零

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

 var myTransferManager:AWSS3TransferManager = AWSS3TransferManager() 

类似的东西

 var myTransferManager:AWSS3TransferManager = AWSS3TransferManager.defaultS3TransferManager() 

另外,您需要提前将默认服务configuration设置为默认服务pipe理器。

我有一个类似的问题。 试图上传致命错误的应用程序崩溃:意外地发现零,而解包一个可选的值。

在仔细检查path中存在的文件后,我发现AWSS3TransferManager没有被构build,因为我忘了设置默认configuration(第三行):

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