BLOG

【Swift】端末からサーバーへ画像とパラメーターを送信してみた。

こんにちは、TYと申します。

外を見ると桜が満開で気持ちの良い季節がやってきました。

この記事はAlamofireを使用してネットワーク POST もしくは PUT リクエストを行って、サーバーに画像とパラメーターを送信する際の処理を説明します。
また、今回はサーバーとの通信エラーを想定した時の処理も追加します。

環境
Xcode 11.3
Swift 5

ライブラリ
Alamofire 5←重要

テストサーバー
アプリケーションがネットワークリクエストを成功させることができるかどうかをテストするため、無料のオンラインツール https://webhook.site/ を使用しました。

import Alamofire

func requestWith(image: UIImage,userId: String){

    let url = "https://webhook.site/xxxxxxxxxxxx"

    let headers: HTTPHeaders = [
        "Content-type": "multipart/form-data"
    ]

    guard let imageData = image.jpegData(compressionQuality: 1.0) else { return }

    AF.upload(multipartFormData: { (multipartFormData) in
        //①②③
        multipartFormData.append(imageData, withName: "image", fileName: "image.jpg", mimeType: "image/jpeg")
        //④
        multipartFormData.append(userId.data(using: .utf8)!, withName: "moji")
    }, to: url, method: .post, headers: headers).responseString { 
    //⑤
    (response) in
        if let statusCode = response.response?.statusCode {
                print(statusCode)
                //⑥
                if case 200...299 = statusCode{
                    print("正常")
                }
                else
                {
                    print("通信エラー")
                }
          }

    }

}

① 送信したい画像ファイルを multipartFormData に追加しています。

withName には、HTML でファイルを送信する時の の name で指定する名前を指定します。

mimeType は、image/jpegimage/png などが入ります。

④ テキストデータを指定しています。

⑤ ここから送信後の処理を指定しています。

⑥ HTTP レスポンスステータスコードを条件に、通信エラーを判断します。

以上、Swift で画像ファイルとパラメータを送信する方法でした。

BLOGトップへ戻る