如何将文件Blob转换为NSData?

时间:2012-03-04 15:33:25

标签: iphone objective-c ios web-services nsdata

我在将Web Blob从Web服务转换为NSData对象时遇到问题。文件Blob可以是任何类型的文件。我可以通过RestKit从Web服务器请求文件并获得以下响应:

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

我通过JSONKit NSDictionary *dict = [[response bodyAsString] objectFromJSONString];将Response转换为字典,效果很好。但我无法弄清楚如何将FileBlob转换为NSData对象,以便我可以将其作为文件写入HDD。如果像上面的例子中的txt-File我可以通过数组并将所有整数值转换为字符

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作为文件写入光盘?

1 个答案:

答案 0 :(得分: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