元々当記事のような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から変換しましょう。
- Data型で使用します。
- withName
- サーバーで受け取る際使用する名前です。サーバー側と名前が一致するかか確認しましょう。
- fileName
- ファイルの名前です。
- mimeType
- ファイルのフォーマットが何か指定します。jpegであれば
"image/jpeg"
、pngであれば"image/png"
などと指定します
- ファイルのフォーマットが何か指定します。jpegであれば
画像は、「画像データ・名前・ファイルネーム・mimeType」を指定します。
これ全てが揃っていないとサーバー側が受け取ってくれない場合があるからです。
これを中途半端にファイルネームを送ってないせいでサーバーが認識してくれない問題に私は当たりました。ご注意ください。
Text
Sample.swift
multipartFormData.append(sendSTR.data(using: String.Encoding.utf8)!, withName: "userId")
- StringData
- 第一引数でsendSTRという変数を指定しているところです。dataに変換するため、
data(using: String.Encoding.utf8)
というメソッドを使用します。
- 第一引数でsendSTRという変数を指定しているところです。dataに変換するため、
- withName
- サーバーで受け取る際使用する名前です。サーバー側と名前が一致するか確認しましょう。
テキストを送る際は簡単です。名前が間違っていないか確認しましょう。
送り先の指定
Sample.swift
to: "http://~~~.com/image-upload/"
toで、送り先URLの指定ができます。
送る際、POSTになりますのでご注意ください。
終わりに
バージョンが変わると今まで使えていたコードが使えない。辛いです。