Я пытаюсь отправить изображение с некоторыми параметрами, но несколько параметров вложено JSON
. Я всегда получал ошибку как «NSDebugDescription
»: «Недопустимое значение вокруг символа 0.»
Я пробовал несколько решений для этого:
1. Almofire
мульти-часть с кодируемым
2. Almofire
multipart со словарем в качестве параметра
3. URLSession
multipart со словарем в качестве параметра
но ни одно из вышеперечисленных решений не помогло мне
let parameters = [
"blmusrname":registerModal?.ownerName,
"blmcityrefid":"1",
"blmstaterefid":"1",
"blmcountryrefid":"1",
"blmoptime" :[["startTime": "09:00:00","closeTime": "18:00:00","day": "1"]]
] as [String : Any]
if let reportedImage = self.selectedImage
{
requestWithdata(NetworkConstants.APILink.registerBusiness, reportedImage.jpegData(compressionQuality: 0.25), parameters, "file") { (response, error) in
if response != nil {
print(response)
}
}
}
func requestWithdata(_ urlString: String, _ imageData: Data?, _ parameters: [String : Any], _ filePathKey: String, completion: @escaping ((_ response: [String: Any?]?, _ error: Error?) -> Void)) {
if let url = URL(string: urlString) {
var request = URLRequest(url: url)
request.httpMethod = "POST"
let boundary = generateBoundaryString()
request.setValue("multipart/form-data", forHTTPHeaderField: "Content-Type")
let access_token = Constants.BEARER.rawValue + UserDefaults.standard.string(forKey: Constants.ACCESS_TOKEN.rawValue)!
request.addValue(access_token, forHTTPHeaderField: Constants.ACCESS_TOKEN.rawValue)
guard let imgData = imageData else {
completion(nil, nil)
return
}
request.httpBody = self.createBodyWithParameters(parameters, filePathKey: filePathKey, imageDataKey: imgData, boundary: boundary)
let task = URLSession.shared.dataTask(with: request, completionHandler: { (data, response, error) in
if let responseData = data {
let responseString = String(data: data!, encoding: String.Encoding.utf8)
print(responseString)
do {
let jsonDict = try JSONSerialization.jsonObject(with: responseData, options: .allowFragments) as? [String: Any?]
completion(jsonDict, error)
} catch {
completion(nil, error)
}
} else {
completion(nil, error)
}
})
task.resume()
}
}
func createBodyWithParameters(_ parameters: [String: Any]?, filePathKey: String, imageDataKey: Data, boundary: String) -> Data {
var body = Data()
if parameters != nil {
for (key, value) in parameters! {
body.appedString("--\(boundary)\r\n")
body.appedString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
body.appedString("\(value)\r\n")
}
}
let filename = "user-profile.jpg"
let mimetype = "image/jpg"
body.appedString("--\(boundary)\r\n")
body.appedString("Content-Disposition: form-data; name=\"\(filePathKey)\"; filename=\"\(filename)\"\r\n")
body.appedString("Content-Type: \(mimetype)\r\n\r\n")
body.append(imageDataKey)
body.appedString("\r\n")
body.appedString("--\(boundary)--\r\n")
return body
}
Ожидается ответ от сервера, но он ничего не возвращает. когда я пытался отладить, он говорит "Multipart: Граница не найдена"
Я пытаюсь из последних 2 дней. Кто-нибудь может помочь с этим? Я думаю, что отправка вложенного JSON в параметрах является проблемой.
Заранее спасибо