2

我正在尝试通过 web 服务将 blob 数据从 oracle db 发送到目标 c。blob 数据是存储在 oracle db 中的 word 文档。

以下是我到目前为止所做的:

  1. 通过java jdbc获取blob对象
  2. 将blob对象转换为java字节数组
  3. 将此字节数组设置为普通 java 对象(序列化)并将其发送到 Web 服务
  4. Webservice 将普通 java 对象发送到 Objective-c,Media-type 为 application/json
  5. 在objective-c中检索json对象并将字节数组分配给NSData
  6. 然后将 NSData 写入文件并打开文件

问题:我无法通过objective-c打开文件,当我在mac中物理打开文件时,它包含一些垃圾字符。任何人都可以让我知道是否无论如何可以将表示 word 文档的 java 字节数组转换为objective-c 识别的数据类型,并最终在objective-c 应用程序中打开word 文档。

以下是您在 Objective-C 端阅读的代码:

注意:代码中的“sourceDoc”是字节数组的键。

NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

if ([data length] >0  && error == nil){

    NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
    NSData *returnData = nil;

    for(NSDictionary *billDict in jsonArray){
        returnData = [NSData dataWithBytes:(__bridge const void *)([billDict objectForKey:@"sourceDoc"]) length:[[billDict objectForKey:@"sourceDoc"] length]];
        break;
    }
}
4

1 回答 1

0

问题是它-[NSData dataWithBytes:length:]需要一个指向实际数据的指针,但您正在向它传递一个字典中的对象。您应该检查使用返回的内容,NSLog(@"%@", [billDict objectForKey:@"sourceDoc"]);但我希望它将是一个 base64 字符串。如果它是 base64 字符串,您可以使用以下问题中的 base64 解码选项之一:How do I do base64 encoding on iphone-sdk? . 如果您使用 Alex Reynolds 对该问题的回答,那么您将returnData在上面的代码中包含您创建并设置的 base64 解码文件头,如下所示:

returnData = [NSData base64DataFromString:[billDict objectForKey:@"sourceDoc"]];
于 2012-12-19T00:24:04.360 回答