iOS SwiftでAlamofireを使用してMultipartFormDataでPOSTパラメータを送信する 質問する

iOS SwiftでAlamofireを使用してMultipartFormDataでPOSTパラメータを送信する 質問する

私は初めて Alamofire を使用しています。最新バージョンの Alamofire 1.3.1 を使用しています。1 回の API 呼び出しで、1 つの画像、1 つのビデオ、およびいくつかの POST パラメータを送信したいと考えています。マルチパート フォーム データを使用しています。マルチパート モジュールは動作しています。追加の POST パラメータを送信するのに問題がありますparams。以下は私のコードです。「params」は追加のパラメータを含む辞書です。これらの POST パラメータをリクエストに追加するにはどうすればよいですか。助けてください

        var fullUrl :String = Constants.BASE_URL + "/api/CompleteChallenge"
         var params = [
        "authKey": Constants.AuthKey,
        "idUserChallenge": "16",
        "comment": "",
        "photo": imagePath,
        "video": videoPath,
        "latitude": "1",
        "longitude": "1",
        "location": "india"
    ]

    let imagePathUrl = NSURL(fileURLWithPath: imagePath!)
    let videoPathUrl = NSURL(fileURLWithPath: videoPath!)

        Alamofire.upload(
        .POST,
        URLString: fullUrl, // http://httpbin.org/post
        multipartFormData: { multipartFormData in
            multipartFormData.appendBodyPart(fileURL: imagePathUrl!, name: "photo")
            multipartFormData.appendBodyPart(fileURL: videoPathUrl!, name: "video")
        },
        encodingCompletion: { encodingResult in
            switch encodingResult {
            case .Success(let upload, _, _):
                upload.responseJSON { request, response, JSON, error in

                  }
                }
            case .Failure(let encodingError):

            }
        }
    )

ベストアンサー1

ついに解決策を見つけました:)。

リクエストにデータを multipartformdata として追加できます。

以下は私のコードです。

  Alamofire.upload(
        .POST,
        URLString: fullUrl, // http://httpbin.org/post
        multipartFormData: { multipartFormData in
            multipartFormData.appendBodyPart(fileURL: imagePathUrl!, name: "photo")
            multipartFormData.appendBodyPart(fileURL: videoPathUrl!, name: "video")
            multipartFormData.appendBodyPart(data: Constants.AuthKey.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"authKey")
            multipartFormData.appendBodyPart(data: "\(16)".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"idUserChallenge")
            multipartFormData.appendBodyPart(data: "comment".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"comment")
            multipartFormData.appendBodyPart(data:"\(0.00)".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"latitude")
            multipartFormData.appendBodyPart(data:"\(0.00)".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"longitude")
            multipartFormData.appendBodyPart(data:"India".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"location")
        },
        encodingCompletion: { encodingResult in
            switch encodingResult {
            case .Success(let upload, _, _):
                upload.responseJSON { request, response, JSON, error in


                }
            case .Failure(let encodingError):

            }
        }
    )

編集1:float、int、文字列の代わりに配列を送信しようとしている場合は、配列または任意の種類のデータ構造をJSON文字列に変換し、このJSON文字列を通常の文字列として渡すことができます。そして、バックエンドでこのJSON文字列を解析して元の配列を取得します。

おすすめ記事