#android #swift #alamofire #multipartform-data
#Android #swift #alamofire #multipartform-данные
Вопрос:
Мне нужно загрузить изображение с составными / данными формы, которые я пробовал :
static func uploadFile(image: UIImage?, parameters:Parameter,onResponse:@escaping(_ result:Parameter)-> (),onFailure:@escaping(_ error:Error)->()){
let url = "ip address"
let imageData = image?.jpegData(compressionQuality: 0.7)
let headers: HTTPHeaders = [
"Authorization": TOKEN!
]
Alamofire.upload(multipartFormData: { (multipartFormData) in
multipartFormData.append("(parameters.toJSON())".data(using: String.Encoding.utf8)!, withName: "entity")
if let data = imageData{
multipartFormData.append(data, withName: "mp3")
}
}, usingThreshold: UInt64.init(), to: url, method: .post, headers: getHeaders()) { (result) in
switch result{
case .success(let upload, _, _):
upload.responseJSON { response in
print("Succesfully uploaded",response.error)
if let err = response.error{
return
}
}
case .failure(let error):
print("Error in upload: (error.localizedDescription)")
}
}
}
Мне нужно отправить модель объекта и изображение. но я должен отправить изображение в виде FormData, а не в теле.
примечание: отправка изображения с ключом «file» и класса с ключом «entity»
я не могу решить это на стороне swift….
ошибки :
Succesfully uploaded Optional(Alamofire.AFError.responseSerializationFailed(reason: Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(error: Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.})))
Комментарии:
1. Вы не вызываете ни
onResponse
ниonFailure
. Вы удалили это, пытаясь упростить свои фрагменты кода? Или вы действительно не вызываете эти замыкания? Проблема в том, что сетевой запрос не выполняется или что вы просто не вызывали замыкания.2. Наконец, если вы не уверены на 100%, что запрос правильный, я бы посоветовал такие инструменты, как Charles или WireShark , чтобы просмотреть запрос и убедиться, что он правильно сформирован. Например. интерполяция строк
parameters.toJSON()
может легко вызвать проблему, если, например, iftoJSON
уже возвращено aData
. Мы не можем комментировать это, не видя сигнатуру методаtoJSON
…3. спасибо, Роб, что ответил мне. я поместил содержимое своей консоли в свой пост. проверьте это, но в нем нет четких данных. у меня есть case .success и case . сбой не так ли? сетевой запрос выполнен успешно.
4. позвольте мне объяснить вам больше. на стороне сервера мне нужен класс с именем ключа «entity» в теле запроса и изображение с именем ключа: «file». Выполнено. как вы это делаете?
5. Наконец-то… У меня было две проблемы. 1. добавление файла с ключом и именем файла является правильным, я забыл имя файла. 2. параметр. toJSON() неверен. toJSONString() верен. роб опубликует эти советы, я проголосую за вас. Спасибо
Ответ №1:
сначала прочитайте комментарии.
не забудьте добавить имя файла, даже если вы установили его за один шаг до загрузки файла.
попробуйте использовать toJSONString() вместо toJSON()