Swift 5 - 如何将 LONGBLOB/缓冲区转换为数据

时间:2021-01-24 15:34:36

标签: javascript ios mysql swift nsdata


我目前正在为学校做一个项目。 我已经使用连接到 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');

谢谢。

1 个答案:

答案 0 :(得分:0)

解决了!
所以错误不在于 swift 代码部分,而在于我的 API 和数据库结构。在阅读了一些 mysql 和 node js 文档之后。我从LONGBLOB(顺便说一句,完全超大)切换到MEDIUMTEXT。在 API 中,我试图从二进制数据而不是从 base64 字符串编码数据创建缓冲区,所以我删除了:

let buffer = Buffer.from(ppData.data, 'binary').toString('base64');