ユーザーが自分の Strava プロファイルに実行をアップロードできるようにする機能をアプリに追加しようとしています。現在、実行はアプリの Documents ディレクトリに gpx ファイルとして保存されています。それらにアクセスする方法はわかっていますが、Alamofire リクエストの構文に問題があります。私のコードは次のようになります。
func getDocumentsDirectory() -> URL {
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let documentsDirectory = paths[0]
do {
let fileURLs = try FileManager.default.contentsOfDirectory(at: documentsDirectory, includingPropertiesForKeys: nil)
print("Directory contents: \(fileURLs)")
} catch {
print("Error while enumerating files \(documentsDirectory.path): \(error.localizedDescription)")
}
return documentsDirectory
}
var path = getDocumentsDirectory()
path = path.appendingPathComponent("Sample_Activity.gpx")
print("\nPath component points to: \(path)\n")
/* ======================== Begin Strava API Upload =========================== */
Alamofire.upload(multipartFormData:{ multipartFormData in
multipartFormData.append("run".data(using: String.Encoding.utf8)!, withName: "activity_type")
multipartFormData.append(path, withName:"activity")
multipartFormData.append("gpx".data(using: String.Encoding.utf8)!, withName: "data_type")
},
usingThreshold:UInt64.init(),
to:"https://www.strava.com/api/v3/uploads",
method:.post,
headers:["Authorization": "Bearer <token>"],
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
debugPrint(response)
}
case .failure(let encodingError):
print(encodingError)
}
})
}
Postman で作業するようにという要求がありましたが、Alamofire では使用できませんでした。これは、Postman で成功したリクエストの写真です: https://i.stack.imgur.com/oxQcx.png
Alamofire を使用すると、毎回 400 ステータスになり、次の結果が得られます。
[Data]: 88 bytes
[Result]: SUCCESS: {
errors = (
{
code = empty;
field = data;
resource = Upload;
}
);
message = "Bad Request";
}
ヘッダー ページの下の 1 つの要素は認証トークンで、Alamofire リクエストの要素と同じです。どんな助けでも大歓迎です。