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 返回不需要的反斜杠的主要内容,如果未能解决你的问题,请参考以下文章

Swift base64 解码返回 nil

PHP - 添加/删除回车返回到 base 64 编码的字符串

ArrayBuffer 到 base64 编码的字符串

iOS - Base64转图片&&图片转Base64

NSData 不接受有效的 base64 编码字符串

在Grails中解码base64图像[重复]