結構実装時に分からなくて悩んだので、備忘録としてまとめ。
タイトル通り、Swift の Alamofire ライブラリを使って、画像データとパラメータを送信する方法です。
画像のみ、とか文字データのみの送信なら、サンプルコードが簡単に見つかったのですが、両方一緒に送るとなると、ちょっと面倒でした。
今回参考にさせていただいた記事はこちら。
Swift 4 Alamofire 4.0を使って、multipart/form-dataのリクエスト – Qiita
https://qiita.com/unpi/items/11ffaa2d60e1a6486a24
なお、ライブラリのインストールは割愛しますので、必要な方は GitHub のページをご確認ください。
GitHub – Alamofire/Alamofire: Elegant HTTP Networking in Swift
https://github.com/Alamofire/Alamofire
さて、さっそくですが、上記の記事を参考にして書いたサンプルコードはこちら。
Alamofire.upload( multipartFormData: {(multipartFormData) in // 画像ファイル multipartFormData.append([画像データ], withName: "[名前]", fileName: "[画像ファイル名]", mimeType: "[画像の種類]") // 文字データ multipartFormData.append([文字列データ].data(using: .utf8)!, withName: [データ名]) }, to: [送信先URL], method: .post, headers: nil, encodingCompletion: {(encodingResult) in switch (encodingResult) { case .success(let upload, _, _): // アップロード成功時の処理 break case .failure(let error): // アップロード失敗時の処理 break } })
今回は、upload()
関数を使用します。
4行目で、送信したい画像ファイルを multipartFormData
に追加しています。
withName
には、HTML でファイルを送信する時の <input type="file" name="image" />
の name
で指定する名前を指定します。
mimeType
は、そのまま image/jpeg
や image/png
などが入ります。
そして、6行目で、画像と一緒に送信したいテキストデータなどを指定します。
なお、画像もテキストデータも、どちらも複数指定できます。
11行目からは、送信後の処理を指定します。
アップロードに成功したら 14行目以降に記述した処理が実行され、失敗したら 17行目からの処理が実行されます。
こちらには任意の処理を追加してください。
処理としては以上です。
私は 2〜7行目の記述方法が分からなくて、ちょっと手こずりました。
以上、Swift の Alamofire を使って、画像ファイルとパラメータを POST 送信する方法でした。
ご参考になれば幸いです。