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)
}
}
)