【Swift】「Alamofire」を使って画像ファイルとパラメータをPOST送信する方法

結構実装時に分からなくて悩んだので、備忘録としてまとめ。
タイトル通り、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/jpegimage/png などが入ります。

そして、6行目で、画像と一緒に送信したいテキストデータなどを指定します。
なお、画像もテキストデータも、どちらも複数指定できます。

11行目からは、送信後の処理を指定します。
アップロードに成功したら 14行目以降に記述した処理が実行され、失敗したら 17行目からの処理が実行されます。
こちらには任意の処理を追加してください。

処理としては以上です。
私は 2〜7行目の記述方法が分からなくて、ちょっと手こずりました。

 

以上、Swift の Alamofire を使って、画像ファイルとパラメータを POST 送信する方法でした。
ご参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG