2016-11-24 3 views
0

私はMongoDBの中のデータオブジェクトを格納する:MongoDBからSwift DataまたはNSDataを格納および取得する方法は?

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の回答に基づいて:私はキャストでき ので、データは要素のInt64(35)と__NSArrayIとして来る 唯一の方法は、Array<AnyObject>にあるが、私はこのフォーム与えられたデータに変換することはできません。

にキャストする試み:

  • Array<Int64>
  • [UInt64型]
  • [UINT8]
  • 【のInt64]
  • UnsafeRawPointer

に失敗しました。 dataStringを想定し

if let a = dataDict["data"] as? Array<Int64> 
+0

ヒント:一般的な暗号のAESを使用している場合は、暗号化スピードマグニチュードはもっと速くなければならない。 – zaph

+0

バイトから 'Data'オブジェクトを作成するには' init(bytes:UnsafeRawPointer、count:Int) 'を試してください。 – zaph

+0

どうすればUnsafeRawPointerを入手できますか?更新された質問を確認してください。 –

答えて

0

がひどく命名されたバイトの配列です:

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 
+0

ありがとうございました。私はまだそれに苦しんでいます。私の最新の編集を見ていただけますか?私は今夜​​まであなたの答えを見ていない、私の通知はオフにする必要があります。 –

関連する問題