我想在MongoDB中存储Data对象:
它是使用CryptoSwift创建的
let bytes = dataString.utf8.map({$0})
let encrypted = try! ChaCha20(key: getAESP(), iv: "zzzzzzzzzzzzzz").encrypt(bytes)
let encryptedData = Data(bytes: encrypted)
使用NSURLSession发送到服务器:
let postData = NSMutableData(data: "patient_id=\(patientID)".data(using: String.Encoding.utf8)!)
postData.append("&data=".data(using: String.Encoding.utf8)!)
postData.append(encryptedData)
let request = NSMutableURLRequest(url: NSURL(string: "\(url)api/patient/document")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
在我的模型方案中,我将数据描述为缓冲区:
var DocumentSchema1 = new Schema({
created_at:Date,
created_by:String,
document_type:String,
document_name:String,
data: Buffer,
modifications: [
{
modified_by: String,
modified_at: Date,
data: Buffer
}
],
isDeleted: Boolean,
deleted_at: String,
deleted_by: String,
})
这种方法的问题是从Web服务返回的JSON是一种缓冲区而不是Data,下面的Swift条件永远不会被执行。
if let dataString = dict["data"] as? Data{
问题是如何从Mongo中获取二进制数据并在Swift中使用它?
EDIT2:根据zaph的回答:
因此数据为__NSArrayI,其元素为Int64(35)
我可以投射的唯一方法是Array<AnyObject>
,但我无法将其转换为给定此表单的数据。
试图将其投射到:
Array<Int64>
失败。
if let a = dataDict["data"] as? Array<Int64>
答案 0 :(得分:0)
假设dataString
是一个名字错误的字节数组:
let dataString :[UInt8] = [0x41, 0x42, 0x43, 0x44]
print("dataString: \(dataString)")
let data = Data(bytes:dataString, count:4)
print("data: \(data)")
print("data as hexadecimal: \(data.map { String(format: "%02hhx", $0) }.joined())")
输出:
dataString: [65, 66, 67, 68]
data: 4 bytes
data as hexadecimal: 41424344