【问题标题】:Swift 5 - How to convert LONGBLOB/Buffer into DataSwift 5 - 如何将 LONGBLOB/Buffer 转换为数据
【发布时间】:2021-04-28 12:48:22
【问题描述】:

我目前正在为学校做一个项目。 我使用 Express 编写了一个连接到 mysql 数据库的 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 返回的缓冲区。
但它总是进入“其他”部分。 我做错了什么

编辑:
正如在 cmets 中所说,我解码了 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
}

谢谢。

【问题讨论】:

  • 那么dict["data"] 包含什么?可能是需要首先解码的 Base64 编码 string 吗?看看stackoverflow.com/q/19088231/1187415
  • dict["data"] 正如您所猜测的,它包含 Base64 编码的字符串。我看了你寄来的东西。现在我有了解码数据,但UIImage(data: data) 也返回 nil,我不知道如何进一步了解失败的更多细节。
  • guard let base64String = dict["data"] as? String else {return nil}; guard let data = Data(base64Encoded: base64String); let image = UIImage(from: data) ?
  • 我也试过这样...
  • 然后呢?怎么了?是否有任何“返回”被调用?哪一个?使用这样的选项怎么样:stackoverflow.com/questions/65887113/…

标签: javascript ios mysql swift nsdata


【解决方案1】:

错误不在于 swift 代码部分,而在于我的 API 和数据库结构。在阅读了一些 MySQL 和 Node.js 文档后,我从LONGBLOB(完全超大)切换到MEDIUMTEXT

另外,在 API 中,我试图从二进制数据而非 base64 字符串编码数据创建缓冲区,所以我删除了这一行:

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

【讨论】:

    猜你喜欢
    • 2017-12-27
    • 2013-07-19
    • 2020-08-25
    • 2017-06-16
    • 2021-10-18
    • 2019-09-21
    • 2020-03-09
    • 1970-01-01
    • 2020-12-02
    相关资源
    最近更新 更多