2016-04-22 10 views
0

ファイルをパラメータ値の1つとして与え、Alamofireでアップロード要求としてパラメータを送信できない理由を知りたいのですが。私はこれを試してみるとうまくいきます。ファイルをAlamofireのパラメータ値の1つとして追加できないのはなぜですか?

let parameters: [String : AnyObject ] = [ 
     "email" : "[email protected]", 
     "password" : "password", 
     "full_name": "XXX"] 

let image: UIImage? = UIImage(named: "logo.png") 

    Alamofire.upload(
     .POST, 
     "http://myurl.com/register", 
     multipartFormData: { multipartFormData in 

      for (key, value) in parameters { 
       multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key) 
       } 

       if let imageData = UIImageJPEGRepresentation(image!, 1) { 
       multipartFormData.appendBodyPart(data: imageData, name: "profile_pic", fileName: "logo.png", mimeType: "image/png") 
       } 
     }, 
     encodingCompletion: { encodingResult in 
      switch encodingResult { 
      case .Success(let upload, _, _): 
       upload.responseJSON { response in 
        debugPrint(response) 
       } 
      case .Failure(let encodingError): 
       print(encodingError) 
      } 
     } 
    ) 

イメージをパラメータ値として渡せないのはなぜですか?また、なぜ画像をUIImageJPEGRepresentationに変更する必要がありますか?

表現を変更せずにイメージを値として渡すと、エラーはNSData形式ではないことをスローします。

画像がある場合でも要求が合格する必要があることに注意してください。

+0

パラメータで試したときに発生したエラーは何ですか? – zcui93

+0

'UIImageはString型のインスタンスには送られません 'と言っています。パラメータの画像の値を格納し、** forループ**自体のオプションの連鎖を使って画像をチェックする必要があります。しかしここで私は画像が利用可能かどうかを別々にチェックしています。私が伝えようとしていることを理解できますか? –

答えて

0

ご存知のように、AlamofireNSURLRequestの処理に役立つライブラリです。これは、クライアントがHTTP要求を介してサーバーと通信できる一般的な方法です。他のプラットフォーム(Android、デスクトップ、Webなど)でもこの方法を使用します。だから彼らは同じ形式でなければならない。 post bodyは、String、Int、byte []などの単純なデータ形式しか受け付けません... UIImageが何であるかはわかりませんが、NSDataです。 NSDataはbyte []の形式です。

テキストファイルや動画をアップロードする場合は、NSDataにも変換する必要があります。

このヘルプが必要です。

+0

ありがとうございました!あなたは私の疑いを明らかにした!!しかし、私が** zcui93 **のコメントにコメントした私の質問に答えることができますか? –

+0

私はあなたが欲しいものを知りません:) – t4nhpt

関連する問題