2

「オブジェクトのアップロード」の下にリストされている手順を実行しようとしています: http://docs.aws.amazon.com/mobile/sdkforios/developerguide/s3transfermanager.html

ただし、アプリケーション全体が Swift で記述されているため、物事を Swift に変換しています。次のコードを思いつきましたが、実行すると、指定したバケットに何もアップロードされません。残念ながら、エラーも発生しないため、トラブルシューティングが困難です。以下に示すように、コンソールにエラーを出力しようとしていますが、myBFTask.error が null になってしまいます。同時に 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
        })

これが私のコンソールに出力されるものです:

ユーザーが投稿用の動画を選択しました!

選択したメディアの URL は次のとおりです: file:xxxxxxxxxxxxxxx.MOV (明らかに実際のファイル パス)

これは文字列としての私の UNIX タイムスタンプです: 1417506382.414219

私は完了ブロックの中にいます

アップロードがうまくいかなかったようです..

エラーなし

4

2 に答える 2

2

同様の問題がありました。致命的なエラーでアップロードしようとすると、アプリがクラッシュしました: オプション値のラップ解除中に予期せず nil が見つかりました。

パスにファイルが存在することを再確認した後、AWSS3TransferManager が構築されていないことがわかりました。これは、デフォルトの構成 (3 行目) を設定するのを忘れていたためです。

let credentialsProvider = AWSStaticCredentialsProvider(accessKey: AccesKey, secretKey: SecretKey)
let configuration = AWSServiceConfiguration(region: ServiceRegionType, credentialsProvider: credentialsProvider)
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration
于 2015-07-26T19:50:48.413 に答える
2

に渡しAWSServiceConfigurationていないためAWSS3TransferManager、問題が発生しています。次の行を変更する必要があります。

var myTransferManager:AWSS3TransferManager = AWSS3TransferManager()

のようなものに

var myTransferManager:AWSS3TransferManager = AWSS3TransferManager.defaultS3TransferManager()

また、事前にデフォルトのサービス構成をデフォルトのサービス マネージャに設定する必要があります。

于 2014-12-02T10:33:09.973 に答える