4

S3に問題があります。 トラブルシューティングの3時間後(その間に私はIAMの役割について学んだ&それらを作成するために管理されました)私はアマゾンS3にfbプロフィール画像をアップロードしようとしています。jpgからS3へアップロード:「リクエスト本体が予期せず終了しました」

マイコード:

if let imageData = NSData(contentsOf: NSURL(string: url) as! URL) { 

          let fileName = ProcessInfo.processInfo.globallyUniqueString + ".jpg" 
          let fileURL = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(fileName) 
          let image = UIImage(data: imageData as Data) 
          let imageData = UIImageJPEGRepresentation(image!, 1.0)! 
          do { 
           try imageData.write(to: fileURL! as URL) 
          } catch _ { 
           self.log.error("Could not write to file.") 
          } 

          let transferManager = AWSS3TransferManager.default() 
          let uploadRequest = AWSS3TransferManagerUploadRequest() 
          uploadRequest?.bucket = "app-files" 
          uploadRequest?.key = "user-data/" + awsId! + "_primary_profile_picture.jpg" 
          uploadRequest?.body = fileURL! 

          transferManager.upload(uploadRequest!).continueWith(executor: AWSExecutor.mainThread(), block: { (task:AWSTask<AnyObject>) -> Any? in 

           if let error = task.error as? NSError { 
            if error.domain == AWSS3TransferManagerErrorDomain, let code = AWSS3TransferManagerErrorType(rawValue: error.code) { 
             switch code { 
             case .cancelled, .paused: 
              break 
             default: 
              print("Error uploading: \(uploadRequest?.key) Error: \(error)") 
             } 
            } else { 
             print("Error uploading: \(uploadRequest?.key) Error: \(error)") 
            } 
            return nil 
           } 

           let uploadOutput = task.result 
           print("Upload complete for: \(uploadRequest?.key)") 
           return nil 
          }) 
         } 

**問題** 私は継続的にこのようになりますS3からThe request body terminated unexpectedlyエラー取得しています:私は何が起こっているかわからない

Error uploading: Optional("user-data/eu-west-1:xxxx-xxxx-xxxx-xxxx-xxxxxxxxxx_primary_profile_picture.jpg") 
Error: Error Domain=com.amazonaws.AWSS3ErrorDomain Code=0 "(null)" 
UserInfo={HostId=XXX, 
Message=The request body terminated unexpectedly, 
Code=IncompleteBody, 
RequestId=1485A0FFBD7819D7} 

を間違っている、私はデバッグして、fileName、fileURL、imageDataは大丈夫と思われる

+3

SDKのv2.5.1にバグがあります。可能であれば、2.5.0にダウングレードしてください。 – donkon

+0

Swift 3サポートのためにアップグレードする必要がありました:/ 2.5は機能しませんでした(Cognito、Dynamo、...) –

+0

Swift 3サポートが2.5.0で導入されました。コグニティとダイナモがうまくいかなかった方法についていくつか詳しく説明できますか? – donkon

答えて

7

、私はそれhereについて少し説明:あなたはcocoapodsを使用している場合は、と2.5.0(互換性スウィフト3)をインストールすることができます。

基本的には、AWSSignatureがアップロードする間違った署名を作成...

あなたはそれを回避するには、2つの方法があります。

1)あなたが必要とするすべてのポッドを宣言することによって、2.5.0を使用してに戻します明示的にそうように:(編集:私はちょうどあなたがあるためSWIFT問題のことを行うことはできません気づいたかもしれオプション2を試してみてください)

pod 'AWSCore', '2.5.0' 
pod 'AWSCognito', '2.5.0' 
pod 'AWSLambda', '2.5.0' 
pod 'AWSSNS', '2.5.0' 
pod 'AWSS3', '2.5.0' 

2)は、Amazonはそれを修正するまで、問題を修正するためのコードを自分で変更します。 AWSCore/Authentication/AWSSignature.mファイルの783-785行目をコメントアウトするだけです。試してみるとそのファイルがロックされているというメッセージが表示され、ロックを解除するだけです。

if (self.endOfStream) { 
    return NO; 
} 
+0

のステップ2を解消できません。ありがとう:) –

+0

申し訳ありませんが、.mファイルにアクセスして変更する方法を説明できますか?それはロックされたフレームワークではありませんか? –

+0

@JamesWhiteにアクセスすると、ロックを解除して編集するかどうか尋ねられます。 [OK]を選択して進みます。 –

0

確かにバグがある現在のAWSS3 SDKを使用します。 2.5.1 SDKのバグがあり

pod 'AWSS3', '2.5.0' 
+0

これはうまくいきません: - 'Podfile'が' AWSCore(= 2.5.1) 'を要求しました - ' AWSS3で必要なAWSCore(= 2.5.0) ' AWSCore(2.5.1)で必要とされるAWSCore(= 2.5.1) ' AWSSNS(2.5.1)で' AWSCore(2.5.1) 'が必要です AWSCognito(2.5.1)で' AWSCore(= 2.5.1) 'が必要です - ' AWSLambda(2.5.1)で必要なAWSCore(= 2.5.1) ' 他のモジュールは2.5.1で動作する必要があります(私の最後のコメントを参照)。 –

+0

私は実際に同じ問題に遭遇しました。関連するすべてのAWSポッドのポッドアップデートが2.5.0になりました。または、AWSポッドを削除したい場合は、AWSS3のみをポッド 'AWSS3'としてインストールし、 '2.5.0'はすべてのAWSポッドを2.5.0 –

+0

としてインストールします。他のコメントを参照してください。私の他のawsサービスは、Cognitoの問題のため2.5.0で動作しません。私は –

関連する問題