我目前正在为学校做一个项目。我使用连接到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
}
谢谢。
发布于 2021-01-31 16:49:14
错误不是在快速代码部分,而是在我的API和数据库结构中。在阅读了一些MySQL和Node.js文档之后,我从LONGBLOB
(完全超大型)切换到了MEDIUMTEXT
。
此外,在API中,我试图从二进制数据创建缓冲区,而不是从base64字符串编码的数据中创建缓冲区,因此我删除了这一行:
let buffer = Buffer.from(ppData.data, 'binary').toString('base64');
https://stackoverflow.com/questions/65872489
复制相似问题