Я пытаюсь загрузить изображение на бэкэнд-клиент с помощью быстрого доступа. Проблема в том, что я не могу получить правильное форматирование для httpbody. Я не хочу использовать многостраничную форму для загрузки, поскольку я не знаю, как обращаться с ней на сервере.Загрузка изображения в swift с несколькими параметрами
Вот код, который у меня есть .. он не работает, когда я просматриваю изображение онлайн, которое он не отображает, и это всего лишь 70kb, который я знаю, определенно не так, как сильно изображение.
var bodyString: String = "session_id=\(session_id)&location_id=\(location_id)"
bodyString = bodyString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!
var body = NSMutableData.alloc()
body.appendData(bodyString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!)
if image != nil{
var imageData = UIImageJPEGRepresentation(image,0.5)
body = NSMutableData.alloc()
//var imageDataString = imageData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
bodyString = "session_id=\(session_id)&location_id=\(location_id)&image_data="
bodyString = bodyString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!
body.appendData(bodyString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!)
var imageString = "&image_data=\(imageData)"
body.appendData(imageData)
}
req.HTTPBody = body
UPDATE: поэтому я решил пойти по пути base64, но это все еще, кажется, не будет работать, я думаю, потому что я закодировал ее ntf8string это правильный способ делать это?
var imageData = UIImageJPEGRepresentation(image,0.5)
var imageDataString = imageData.base64EncodedStringWithOptions(.allZeros)
body = NSMutableData.alloc()
bodyString = "session_id=\(session_id)&location_id=\(location_id)&tag_type=\(tag_type)&image_data=\(imageDataString)"
bodyString = bodyString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!
body.appendData(bodyString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!)
и на внутреннем интерфейсе я декодировании это нравится:
image_data_decoded = base64.b64decode(image_data)
ОК, это лучше. Несколько вещей: во-первых, не используйте 'NSMutableData.alloc()'. Это просто 'NSMutableData()'. 2. Вы должны посмотреть на 'bodyString' и убедиться, что он выглядит ОК (т. Е. Что ни одна из этих переменных не была опцией, которая в конечном итоге вставляла в вашу строку« Необязательный (...) ». 3. Возможно, вы захотите использовать что-то вроде [Charles] (http://charlesproxy.com), чтобы посмотреть на фактический запрос и убедиться, что все в порядке. Вы не поделились полной конфигурацией 'NSMutableURLRequest', поэтому мы просто не можем прокомментировать это. – Rob
На сервере В PHP я бы склонен использовать ['base64_decode'] (http://php.net/manual/en/function.base64-decode), но я не знаю, что такое PHP. Я не знаком с' base64.b64decode'. .php). Независимо от того, что вы, вероятно, захотите изучить «image_data» и убедитесь, что он прошел там без помех, а затем подтвердите, что именно создалось «image_data_decoded». – Rob