【发布时间】:2015-07-12 10:21:27
【问题描述】:
我正在尝试使用 swift 将图像上传到后端客户端。问题是我似乎无法为 httpbody 获取正确的格式。我不想使用多部分表单进行上传,因为我不知道如何在后端处理它。
这是我的代码..当我在线查看图像时它不起作用,它不显示,它只有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
更新: 所以我决定采用 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并确保它看起来不错(即这些变量都不是可选项,最终将Optional(...)插入到您的字符串中。3. 您可能想使用Charles 之类的东西来查看根据实际请求并确保没问题。您还没有分享NSMutableURLRequest的完整配置,因此我们无法对此发表评论。 -
在服务器端,是 PHP 吗?我不熟悉
base64.b64decode。在 PHP 中,我倾向于使用base64_decode。无论如何,您可能想要检查image_data并确保它没有受到干扰,然后确认image_data_decoded产生的确切内容。
标签: ios swift network-programming