Edited at

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

More than 1 year has passed since last update.

元々当記事のような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になりますのでご注意ください。


終わりに

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