LoginSignup
24
21

More than 3 years have passed since last update.

【Swift3.0】Alamofireで画像&パラメータを送信

Last updated at Posted at 2017-05-15

元々当記事のようなAlamofireで画像をPostする方法はQiitaにありますが、Swift3.0ではないので躓いたため知見として残します。

以下の記事を参考にしました。ありがとうございます。
【Swift/php】Alamofireで画像upload&パラメータをPOST

ライブラリ

  • Alamofire
  • SwiftyJSON

コード

Sample.swift
Alamofire.upload(
    multipartFormData: { multipartFormData in
        // 送信する値の指定をここでします
        multipartFormData.append(data, withName: "test", fileName: "test.jpeg", mimeType: "image/jpeg")
        multipartFormData.append(sendSTR.data(using: String.Encoding.utf8)!, withName: "userId")
    },
    to: "http://~~~.com/image-upload/",
    encodingCompletion: { encodingResult in
        switch encodingResult {
            case .success(let upload, _, _):
                upload.responseJSON { response in
                    // 成功
                    let responseData = response
                    print(responseData ?? "成功")
                }
            case .failure(let encodingError):
                // 失敗
                print(encodingError)
        }
    }
)

説明

uploadメソッド

Sample.swift
Alamofire.upload()

Alamofireで画像やファイルのアップロードをする際に使うメソッドです。
公式: Uploading Data to a Server

パラメーターの設定

multipartFormDataの中で値を指定します。
下記は各パラメーターです。
画像でもテキストでもmultipartFormData.appendを使います。

画像

Sample.swift
multipartFormData.append(data, withName: "test", fileName: "test.jpeg", mimeType: "image/jpeg")
  • image
    • Data型で使用します。UIImageJPEGRepresentationなどを使い、UIImageから変換しましょう。
  • withName
    • サーバーで受け取る際使用する名前です。サーバー側と名前が一致するかか確認しましょう。
  • fileName
    • ファイルの名前です。
  • mimeType
    • ファイルのフォーマットが何か指定します。jpegであれば"image/jpeg"、pngであれば"image/png"などと指定します

画像は、「画像データ・名前・ファイルネーム・mimeType」を指定します。
これ全てが揃っていないとサーバー側が受け取ってくれない場合があるからです。

これを中途半端にファイルネームを送ってないせいでサーバーが認識してくれない問題に私は当たりました。ご注意ください。

Text

Sample.swift
multipartFormData.append(sendSTR.data(using: String.Encoding.utf8)!, withName: "userId")
  • StringData
    • 第一引数でsendSTRという変数を指定しているところです。dataに変換するため、data(using: String.Encoding.utf8)というメソッドを使用します。
  • withName
    • サーバーで受け取る際使用する名前です。サーバー側と名前が一致するか確認しましょう。

テキストを送る際は簡単です。名前が間違っていないか確認しましょう。

送り先の指定

Sample.swift
to: "http://~~~.com/image-upload/"

toで、送り先URLの指定ができます。
送る際、POSTになりますのでご注意ください。

終わりに

バージョンが変わると今まで使えていたコードが使えない。辛いです。

24
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
21