Iphone 将PDF文件从客户端传输到服务器时出现的问题
我已经实现了从Windows桌面应用程序到iPhone应用程序的客户端服务器传输。我以不同的格式传输数据,但始终使用NSStream轮询模式作为字符串:Iphone 将PDF文件从客户端传输到服务器时出现的问题,iphone,objective-c,ios,xcode,ipad,Iphone,Objective C,Ios,Xcode,Ipad,我已经实现了从Windows桌面应用程序到iPhone应用程序的客户端服务器传输。我以不同的格式传输数据,但始终使用NSStream轮询模式作为字符串: if([inputStream hasBytesAvailable]) { len = [inputStream read:buffer maxLength:sizeof(buffer)]; if (len > 0) { NSString *output = [[NSStri
if([inputStream hasBytesAvailable]) {
len = [inputStream read:buffer maxLength:sizeof(buffer)];
if (len > 0) {
NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];
if (nil != output) {
[_arrRisposta addObject:output];
_strRisposta = [NSMutableString stringWithString: output];
}
}
else {
break;
}
}
一切都很完美,但当我传输PDF文件并保存它时,文件就不一样了。在UIWebView中加载文件时,页数正确,但没有内容。我这样保存文件:
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
NSString *dataFile = [docDir stringByAppendingPathComponent:[NSString stringWithFormat:@"temp.%@", @"pdf"]];
if ([fileManager fileExistsAtPath:dataFile]) {
[fileManager removeItemAtPath:dataFile error:nil];
}
[_strContenuto writeToFile:dataFile atomically:YES encoding:NSUTF8StringEncoding error:nil];
NSURL *fileUrl = [NSURL fileURLWithPath:dataFile];
[webModello loadRequest:[NSURLRequest requestWithURL:fileUrl]];
怎么了?我试图更改字符串的编码,但尚未解决。如果将传输的文件与原始文件进行比较,则会发现一些字符不匹配。
有人能帮帮我吗?你不应该使用字符串。更改代码以使用NSData对象。PDF文件不是字符串,要使用字符串(如果可能的话),您必须担心各种各样的编码问题 我还没有找到NSData的确切api用法,这都是我的想法。。。所以不要去复制和粘贴这个
// Somewhere in your code
_myData = [[NSMutableData alloc] init];
// when data comes in....
if([inputStream hasBytesAvailable]) {
len = [inputStream read:buffer maxLength:sizeof(buffer)];
if (len > 0) {
[_myData addBytes:buffer length:len];
}
}
else {
break;
}
}
// when the callback comes in saying all data there:
[_myData writeToFile:@"path/topdf/file.pdf" atomically:YES];
谢谢你,汤姆,但是我不能在我的工作中使用NSData。我收到的字符串有一个头和一个尾,用于分隔内容(例如…)。我提取我感兴趣的字符串,然后处理它。如果是PDF格式(例如%PDF-1.4%Chì、5 0 obj…startxref 3114%%EOF),请将其另存为文件并在UIWebView中打开。我被迫使用字符串。我该怎么办?你必须使用你能找到的最小、最简单的PDF文件。比如说它在服务器上的长度是1952字节。然后当你恢复它时,它需要精确到1952字节长。可能会出现类似url的编码或xml编码等。如果您无法控制服务器,并且由于存在其他客户端而“知道服务器工作”,那么这就是胜利的一半。但是,一旦得到相同的字节长度,它可能仍然不起作用。如果您在服务器端也有控制权,我会将pdf作为base64编码字符串传输,然后在客户端对其进行解码。那就行了。另一点-我看到您在写入数据时使用NSUTF8StringEncoding,在加载数据时使用ASCII。如果你想愚弄NSString,那么我想,在任何地方都坚持使用ascii。用Base64编码/解码解决。非常感谢你,汤姆!