###前提・実現したいこと
SwiftでAPIKitを使用し画像データをPOSTしたいのです。
サーバーサイドはPHPで書いています。
###発生している問題・エラーメッセージ
画像データがなければparametersに入れてPOSTできるのですが、画像データを入れるとPOSTできなくなります。
###該当のソースコード
swift
1// [POST] /api/users 2 struct PostUser: APIRequest { 3 typealias Response = User 4 5 var authenticate: Bool { return false } 6 var method: HTTPMethod = .post 7 var path: String { return "/api/users" } 8 var imageData: Data? 9 10 var bodyParameters: BodyParameters? { 11 let part = MultipartFormDataBodyParameters.Part(data: imageData!, name: "thumbnail") 12 return MultipartFormDataBodyParameters(parts: [part]) 13 } 14 15 var parameters: Any? { 16 return [ 17 "screen_name": "dasfasfaa", 18 "name": "fsfdsfda", 19 "password": "daffffffffs", 20 "email": "sdflaksfa@gmail.com"] 21 } 22 23 init(imageData: Data) { 24 self.imageData = imageData 25 } 26 27 func response(from object: Any, urlResponse: HTTPURLResponse) throws -> User { 28 return try decodeValue(object) 29 } 30 31 func intercept(object: Any, urlResponse: HTTPURLResponse) throws -> Any { 32 print(urlResponse.statusCode) 33 print(urlResponse) 34 print(object) 35 return object 36 } 37 } 38
###試したことと疑問な事
1,parametersにimageDataも入れてみた。
swift
1 var parameters: Any? { 2 return [ 3 "thumbnail": imageData!, 4 "screen_name": "dasfasfaa", 5 "name": "fsfdsfda", 6 "password": "daffffffffs", 7 "email": "sdflaksfa@gmail.com"] 8 } 9
"thumbnail": imageData!を削除してみるとinterceptメソッド内のobjectの中でthumbnail field is requiredとなりますが、
上記のように"thumbnail": imageData!を追加するとinterceptメソッドも実行されずswitch文の.failureに入りAPIKit.SessionTaskError error 1となります。
2,imageDataがなければPOSTできるのか試してみた。
(サーバー側の仕様でthumnailがrequiredなので成功はしていませんがinterceptメソッドの中のobjectではthumbnail field is requiredになります。)
3,そもそもPHP側ではfileで受け取ると仕様書に書いてありますが、Data型にして送るのはあっているのか。
ターミナルで
curl -XPOST -H "Accept: application/json" -F thumbnail=@/Users/名前/Desktop/test.png -F screen_name=hoge -F name=fuga -F password=hogefuga -F email=hogehgoe@gmail.com https://任意のURL
するとPOSTは成功します。
4,APIKitではAcceptのデフォルト値はapplication/jsonなのか。
現在は特に指定などはしていません。
###知りたいこと
APIKitで画像データをPOSTするときのAPIの記述のサンプルなど知りたいです。
どうかよろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。