kłopoty z dostaniem głowę wokół kodowania parametrów w Alamofire 4. Przed chciałbym użyć ParameterEncoding
wyliczanie i zrobić coś takiego:Jak wykonać kodowanie parametrów w Alamofire 4?
Alamofire.ParameterEncoding.URL.encode(mutableURLRequest, parameters: nil).0
Jednak od tego czasu została zastąpiona ParameterEncoding
:
public typealias Parameters = [String: Any]
public protocol ParameterEncoding {
func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest
}
Jak mogę połączyć to z moim bieżącym kodem? Jak zakodować mój bieżący numer 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's 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)
}
Podczas prośbę:
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
//Some code
}
Znalazłeś rozwiązanie proszę? – Sam