2012-03-04 152 views
2

我有一個問題,將文件Blob從Web服務轉換爲NSData對象。文件Blob可以是任何類型的文件。我可以從通過RestKit一個Web服務器請求一個文件,並得到如下回應:如何將文件Blob轉換爲NSData?

[{ 
    "FileBlob": [ 
     65, 
     108, 
     108, 
     111, 
     99, 
     46, 
     32, 
     83, 
     /* more integer values omitted */ 
    ], 
    "FileID": 1234567890, 
    "FileName": "name.txt" 
}] 

我將經由JSONKit NSDictionary *dict = [[response bodyAsString] objectFromJSONString];工作正常響應到字典。但我不知道如何將FileBlob轉換爲NSData對象,以便我可以將它作爲文件寫入HDD。在像上面的例子中,我可以走線槽的數組轉換一個txt,文件的情況下,所有整數值字符

NSMutableString *fileString = [NSMutableString string]; 
for (NSNumber *value in [[dict valueForKey:@"FileBlob"] objectAtIndex:0]) { 
    [fileString appendFormat:@"%c", (char)value.integerValue]; 
} 

,然後一切都保存到磁盤

NSData *data = [fileString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO]; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *file = [[paths objectAtIndex:0] stringByAppendingPathComponent:filename];   
[[NSFileManager defaultManager] createFileAtPath:file contents:data attributes:nil]; 

但是,如果該文件是其他的東西像PDF這不起作用。有什麼我可以做的,將文件Blob轉換爲NSData對象或其他任何東西將blob作爲文件寫入光盤?

回答

0

使用NSMutableData代替:

NSMutableData *data = [NSMutableData dataWithCapacity:blobs.count]; 

for (NSNumber *number in blobs) 
{ 
    uint8_t byte = (uint8_t)[number intValue]; 
    [data appendBytes:&byte length:1]; 
} 

// write data to file 
+0

哇非常感謝你的幫助。你的建議完美。 – lahmar 2012-03-04 15:48:43