问题描述
我目前正在为学校做一个项目。 我已经使用连接到 mysql 数据库的 Express 编写了一个 API。现在我正在编写 iOS 应用程序。 我的问题是我需要保存个人资料图片。所以我将图片的 png 数据保存到 **LONGBLOB** 到 db 中,我想将图像重新创建到 **UIImage**。 为此,我正在尝试将缓冲区转换为 ```Data``` 因此,API 将返回一个以这种方式创建的缓冲区:
let buffer = Buffer.from(ppData.data,'binary').toString('base64');
在 iOS 方面我尝试过:
guard let data = dict["data"] as? Data else {return nil}
其中 dict["data"]
是 API 返回的缓冲区。
但它总是进入“其他”部分。
我做错了什么
编辑:
正如评论中所说,我解码了 Base64 编码的字符串。现在数据被解码,但从中创建 UIImage 失败,没有任何细节。我试过的是:
let image = UIImage(from: base64DecodedData)
例如:
guard let strData = dict["data"] as? String else {
return nil
}
guard let data = Data(base64Encoded: strData,options: .ignoreUnknownCharacters) else {
return nil
}
guard let picture = UIImage(data: data) else {
return nil
}
编辑解决:
所以错误不是在 swift 代码部分,而是在我的 API 和数据库结构中。在阅读了一些 mysql 和 node js 文档之后。我从 LONGBLOB(顺便说一句,这是完全超大的)切换到 MEDIUMTEXT。在 API 中,我试图从二进制数据而不是从 base64 字符串编码数据创建缓冲区,所以我删除了:
let buffer = Buffer.from(ppData.data,'binary').toString('base64');
谢谢。
解决方法
解决了!
所以错误不在于 swift 代码部分,而在于我的 API 和数据库结构。在阅读了一些 mysql 和 node js 文档之后。我从LONGBLOB
(顺便说一句,完全超大)切换到MEDIUMTEXT
。在 API 中,我试图从二进制数据而不是从 base64 字符串编码数据创建缓冲区,所以我删除了:
let buffer = Buffer.from(ppData.data,'binary').toString('base64');