There was a problem with the fact that I came across a parameter encoding in Alamofire 4. Before I use the ParameterEncoding enumeration and do something like this:
Alamofire.ParameterEncoding.URL.encode(mutableURLRequest, parameters: nil).0
However, it has since been replaced with the ParameterEncoding protocol :
public typealias Parameters = [String: Any] public protocol ParameterEncoding { func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest }
How do I link this to my current code? How to encode the current mutableURLRequest ?
EDIT:
static func urlRequestWithComponents(urlString:String, parameters:Dictionary<String, Any>, data:Data?, contentType: ContentType, parameterName: String) -> (URLRequestConvertible, Data) { var urlRequest = URLRequest(url: URL(string: urlString)!) urlRequest.cachePolicy = .reloadIgnoringLocalCacheData urlRequest.httpMethod = Alamofire.HTTPMethod.post.rawValue let boundaryConstant = "multipart-boundary"; let multipartContentType = "multipart/form-data;boundary="+boundaryConstant urlRequest.setValue(multipartContentType, forHTTPHeaderField: "Content-Type") // Create upload data to send var uploadData = Data() if data != nil { // Add multipart data uploadData.append("\r\n--\(boundaryConstant)\r\n".data(using: String.Encoding.utf8)!) if contentType == .Image_JPEG { uploadData.append("Content-Disposition: form-data; name=\"\(parameterName)\"; filename=\"file.jpeg\"\r\n".data(using: String.Encoding.utf8)!) uploadData.append("Content-Type: image/jpeg\r\n\r\n".data(using: String.Encoding.utf8)!) } else if contentType == .Audio { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "MMyyyyddsshhmmA" // superset of OP format let audioFileName = "recording-\(dateFormatter.string(from: Date())).mp4" uploadData.append("Content-Disposition: form-data; name=\"\(parameterName)\"; filename=\"\(audioFileName)\"\r\n".data(using: String.Encoding.utf8)!) uploadData.append("Content-Type: audio/mpeg\r\n\r\n".data(using: String.Encoding.utf8)!) } uploadData.append(data!) } // Add parameters for (key, value) in parameters { uploadData.append("\r\n--\(boundaryConstant)\r\n".data(using: String.Encoding.utf8)!) uploadData.append("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n\(value)".data(using: String.Encoding.utf8)!) } uploadData.append("\r\n--\(boundaryConstant)--\r\n".data(using: String.Encoding.utf8)!) // return URLRequestConvertible and Data return (urlRequest, uploadData) }
When executing the request:
let urlRequest = urlRequestWithComponents(urlString: url, parameters: parameters, data: imageData, contentType: .Image_JPEG, parameterName: "question_img") alamoManager.upload(urlRequest.1, with: urlRequest.0).responseObject { (response: DataResponse<CustomResponse>) in
ios swift swift3
Kexari
source share