代码之家  ›  专栏  ›  技术社区  ›  Felipe Ferri

base64EncodedString返回不需要的反斜杠[重复]

  •  1
  • Felipe Ferri  · 技术社区  · 7 年前

    我正在将JPEG图像编码为Base64,以便使用Alamofire发送到我的应用程序后端。

    当我使用Charles代理检查发送的字符串时,我发现编码的字符串逃逸了所有斜杠( / )带反斜杠(成为 \/ )。例如,字符串 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
        }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Felipe Ferri    7 年前

    我最后使用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
        }