2012-03-04 139 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