如何将属性字符串保存到解析服务器对象类型字段中

Posted

技术标签:

【中文标题】如何将属性字符串保存到解析服务器对象类型字段中【英文标题】:How to save attributedstring into Parse server Object type field 【发布时间】:2020-08-25 06:11:47 【问题描述】:

我正在尝试将属性文本保存到 Parse 服务器。 字段类型为 Object。

查看代码


            let htmlData = try attributedText
                .data(from: NSRange(location: 0,
                                    length: attributedText.length),
                      documentAttributes: documentAttributes)
            // htmlData is Data type
            let note = PFObject(className:"Note")
            note["Data"] = htmlData
            note.saveEventually  (success, error) in
                if (success) 
                    // success is false
                
            

我收到此错误

Note.Data 的架构不匹配;预期对象但得到字节

注意:Note.Data 列类型为Object

知道如何解决这个问题吗?

谢谢

【问题讨论】:

【参考方案1】:

htmlData 是属性字符串的二进制数据表示。二进制数据不能直接存储在数据库中,因为 Parse Server 不支持 BLOB 类型的 Parse Object 字段。您需要与 Parse Server 的字段类型兼容的二进制数据表示,例如 String 类型。

您可以将二进制数据转换为base64编码的String,这是一种ASCII表示,简单地说,可读文本:

// Create binary data from attributed text
let htmlData = try attributedText.data(
    from: NSRange(location: 0, length: attributedText.length),
    documentAttributes: documentAttributes)

// Create string from binary data
let base64HtmlData = htmlData.base64EncodedData(options:[])

// Store string in Parse Object field of type `String`
let note = PFObject(className: "Note")
note["Data"] = base64HtmlData

您必须在 Parse Dashboard 中确保您的 Data 列的类型是 String

但是,请记住,大数据应该存储在 Parse Files 中,因为 Parse Objects 的大小限制为 128 KB。此外,您不希望 MongoDB 数据库中存在大型数据 BLOB,因为它会在您扩展时对性能产生负面影响。

【讨论】:

谢谢。如果 htmlData 通常包含图像怎么办。仍然将其转换为 base64String 是个好主意吗?另外,您提到使用 Parse File 而不是 base64String。是用这种方式吗? note["Data"] = PFFileObject(data: htmlData) 其中文件类型的数据列 我更正了答案。您的属性字符串是否包含图像无关紧要。我能想到的唯一问题是尺寸。您可以将 htmlData 转换为 base64 字符串并计算其所需的存储大小,然后确保它远低于 128kB 大小限制。

以上是关于如何将属性字符串保存到解析服务器对象类型字段中的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义 ObjectId 添加到解析服务器对象?

如何通过 JSON 对象将数据保存到 mongodb 数据库?

如何在 Kotlin 中解析 JSON?

NodeJS - request对象

NodeJS - request对象

使用 Blazor 将输入文本动态绑定到类/对象属性