iOS
Swift
Alamofire

Alamofireでmultipart/form-dataリクエスト

More than 2 years have passed since last update.

Alamofire/Alamofireでの multipart/form-data リクエストのやり方です。
元々もサポートされてませんでしたが、バージョン1.3.0から利用可能になりました。

サンプルコード

これからリクエストするAPIは

  • type: "image" or "video" の文字列値を取りうる
  • data: 画像 or 動画のバイナリデータ

の2つのパラメータを受け付けるとします。

Alamofire.upload(.POST,
        URLString: "https://api.golog13.com/v1/upload",
        headers: nil,
        multipartFormData: { multipartFormData in
            // 文字列データはUTF8エンコードでNSData型に
            multipartFormData.appendBodyPart(data: "image".dataUsingEncoding(NSUTF8StringEncoding)!, name: "type")
            // バイナリデータ
            // サーバによってはファイル名や適切なMIMEタイプを指定しないとちゃんと処理してくれないかも
            multipartFormData.appendBodyPart(data: data, name: "data", fileName: "test.png", mimeType: "image/png")
        },
        // リクエストボディ生成のエンコード処理が完了したら呼ばれる
        encodingCompletion: { encodingResult in
            switch encodingResult {
            // エンコード成功時
            case .Success(let upload, _, _):
                // 実際にAPIリクエストする
                upload.response { request, response, data, error in
                    if let error = error {
                        println("error: \(error)")
                    }

                    // ここからレスポンスを受け取って処理をする..
                }
            // エンコード失敗時
            case .Failure(let encodingError):
                println(encodingError)
            }
        }
)