Проблемы при передаче файлов PDF с клиента на сервер - PullRequest
0 голосов
/ 07 декабря 2011

Я реализовал передачу клиент-сервер из настольного приложения Windows в приложение iPhone. Я передаю данные в другом формате, но всегда в виде строки, используя режим опроса NSStream:

    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]];

Что не так? Я пытался изменить кодировку строки, но я не решил. Если я сравниваю переданный файл с оригиналом, есть некоторые символы, которые не совпадают. Может ли кто-нибудь помочь мне, пожалуйста?

1 Ответ

1 голос
/ 07 декабря 2011

Вы не должны использовать строки. Измените свой код, чтобы использовать объекты NSData. PDF-файлы не являются строками, и есть множество проблем с кодировкой, о которых вам следует позаботиться, чтобы это работало со строками (если это когда-либо произойдет).

Я не посмотрел точное использование API для NSData, это все из моей головы ... так что не копируйте и не вставляйте это!

// 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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...