将图像转换为 Json Swift 3 的 Base64

Posted

技术标签:

【中文标题】将图像转换为 Json Swift 3 的 Base64【英文标题】:Convert Image to Base64 for Json Swift 3 【发布时间】:2016-12-02 15:48:04 【问题描述】:

我需要将UIImage 转换为base64 以将其发送到JSON。我的问题是转换。我的代码:

//Proof #1
let base64String = imageData?.base64EncodedData(options: .endLineWithLineFeed)
//Proof #2 
let base64String = imageData?.base64EncodedString(options: .endLineWithLineFeed)

let dataJson = ["patient_image": ["title": titleInfo, "description": descriptionInfo, "patient_id": globalID, "images_attributes": ["file": base64String]]]

    let url = NSURL(string: "MY_URL")

    let request = NSMutableURLRequest(url: url! as URL)
    request.httpMethod = "POST" //set http method as POST

    request.httpBody = try! JSONSerialization.data(withJSONObject: dataJson, options: .prettyPrinted)

    request.addValue("application/json", forHTTPHeaderField: "Content-Type")

我尝试了Swift 3 提供的将图像转换为base64 的两种方式,但两者都出现相同的错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (_SwiftValue)'

有人可以帮助我吗?非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

删除选项:

let base64String = imageData.base64EncodedString()

完整代码:

/*
let imageData = Data()
let titleInfo = "test"
let descriptionInfo = "test"
let globalID = "test"
*/

let base64String = imageData.base64EncodedString()

let dataJson = ["patient_image": ["title": titleInfo, "description": descriptionInfo, "patient_id": globalID, "images_attributes": ["file": base64String]]]

let url = NSURL(string: "MY_URL")
let request = NSMutableURLRequest(url: url! as URL)
request.httpMethod = "POST" //set http method as POST

request.httpBody = try! JSONSerialization.data(withJSONObject: dataJson, options: .prettyPrinted)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")

另外(与您的问题无关)键名 images_attributes 听起来像是需要一个数组。

【讨论】:

let base64String = imageData.base64EncodedString() 很酷,它对我帮助很大。但是我想知道如果我们使用选项,为什么以及有什么区别?

以上是关于将图像转换为 Json Swift 3 的 Base64的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Alamofire 4.4.0 将 JSON 字符串转换为转义的 JSON 字符串(Swift 3)?

将 json 和 HTTP“post”代码转换为 Swift 3 时出错

Swift json 解析错误:无法将 NSCFConstantString 类型的值转换为 NSArray

在 Swift 中将字典转换为 JSON

在 Swift 中将字典转换为 JSON

NSMutableArray true 转换为 json 输出并在 Swift 3 中使用 Alamofire 将其发布到远程