Alamofire 是一个在GitHub上star数已超过24k的网络库。
先贴出一段代码,这是我在StravaKit中增加的上传fit文件功能:
extension Requestor {
public func uploadFitFile(url: String, params: [String : String]?, file: URL, completionHandler: ((_ response: Any?, _ error: NSError?) -> ())?) {
guard let accessToken = Strava.sharedInstance.accessToken else { let error = Strava.error(.noAccessToken, reason: "No Access Token") completionHandler?(nil, error) return } debugPrint(accessToken) let au = "Bearer \(accessToken)" let headers = ["Authorization": au]
Alamofire.upload(multipartFormData: { (multipartFormData) in if let params = params { for (key, value) in params { multipartFormData.append(value.data(using: .utf8)!, withName: key) } } multipartFormData.append(file, withName: "file", fileName: file.lastPathComponent, mimeType: "multipart/form-data") }, usingThreshold: SessionManager.multipartFormDataEncodingMemoryThreshold, to: baseUrl + url, method: .post, headers: headers) { (encodingResult) in switch encodingResult { case .success(let upload, _, _): upload.responseJSON(completionHandler: { (response) in
if let value = response.result.value { let dict = value as! Dictionary<String, Any>; var error = response.result.error as NSError? if let err = dict["error"] { if (err as AnyObject).isKind(of: NSNull.self) { debugPrint("成功")
} else { debugPrint("失败",err) error = NSError.init(domain: "strava", code: 0, userInfo: [NSLocalizedDescriptionKey:err])
}
}
if let completionHandler = completionHandler { completionHandler(response.result,error) } } else { if let completionHandler = completionHandler { if let error = response.result.error { completionHandler(response.result,error as NSError) }
}
}
}) case .failure(let error): print(error) }
}
}
}
|