Как преобразовать файл Blob в NSData? - PullRequest
2 голосов
/ 04 марта 2012

У меня проблема с преобразованием файлового блоба, пришедшего с веб-сервиса, в объект NSData.Файловый блоб может быть файлом любого типа.Я могу запросить файл с веб-сервера через RestKit и получить следующий ответ:

[{
   "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, чтобы я мог записать его в виде файла на жесткий диск.В случае 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-объект в виде файла на диск?

1 Ответ

0 голосов
/ 04 марта 2012

Используйте 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
...