base64EncodedString 返回不需要的反斜杠
Posted
技术标签:
【中文标题】base64EncodedString 返回不需要的反斜杠【英文标题】:base64EncodedString returns undesired backslashes [duplicate] 【发布时间】:2018-05-06 17:06:30 【问题描述】:我正在将 JPEG 图像编码为 Base64,以便使用 Alamofire 发送到我的应用后端。
当我使用 Charles Proxy 检查发送的字符串时,我发现编码的字符串使用反斜杠(变为\/
)转义了所有斜杠(/
)。比如开头的字符串data:image/jpeg;base64,
变成:
data:image\/jpeg;base64,
作为 Base64 编码字符串中的所有斜杠,这会使编码字符串不可用。
这是我用于编码图像的代码。变量 imageBase64 接收带有转义斜杠的字符串。
if let image = image
let croppedImage = image.af_imageAspectScaled(toFill: CGSize(width: 500, height: 500))
if let imageData = UIImageJPEGRepresentation(croppedImage, 0.8)
let imageBase64 = "data:image/jpeg;base64,\(imageData.base64EncodedString())"
base64dict["base64"] = imageBase64 as AnyObject
bodyParams["AVATAR"] = base64dict as AnyObject
else
base64dict["base64"] = "null" as AnyObject
bodyParams["AVATAR"] = base64dict as AnyObject
当我使用 Alamofire 将 imageData 字符串发送到后端时,请求正文中发送的 json 变成了这样:
"AVATAR":
"base64": "data:image\/jpeg;base64,\/9j\/4AAQSkZJRgABAQAAkACQAAD\/4QC..."
所有斜线都被转义了。
我用于发出请求的代码如下:
Alamofire.request(finalURL,
method: method,
parameters: bodyParams,
encoding: JSONEncoding.default,
headers: ["Content-Type": "application/json"])
.responseJSON response in
// process response
【问题讨论】:
您好,我必须编辑问题。实际上,反斜杠是在 Alamofire 发送到服务器的字符串上添加的。 当你的代码没有对字符串的那部分进行任何base64编码时,怎么可能是base64编码在image\/jpeg
中添加了反斜杠?
代码没有问题我认为你在服务器端得到反斜杠,只需检查后端 devekoper
您是否在稍后将数据发送到服务器之前对数据使用 JSON 编码? JSON encoding can perfectly validly escape forward slashes.
你好,马特,是的,我正在使用 JSON 编码来使用 Alamofire 发送图像。我更新了问题以反映这一点。
【参考方案1】:
我结束了使用 csim 在此答案中发布的自定义 JSONEncoder:Alamofire 5 Escaping Forward Slashes。
我不得不创建一个新类,使用 csim 提供的代码,然后 Alamofire 请求变成:
Alamofire.request(finalURL,
method: method,
parameters: bodyParams,
encoding: JSONEncodingWithoutEscapingSlashes.default,
headers: ["Content-Type": "application/json"])
.responseJSON response in
// process response
【讨论】:
以上是关于base64EncodedString 返回不需要的反斜杠的主要内容,如果未能解决你的问题,请参考以下文章