Как правильно опубликовать файл с iPhone на сервере node.js, который использует node-formidable? - PullRequest
2 голосов
/ 16 апреля 2011

Обновление : это было исправлено в репозитории phonegap github 16 мая 2011 года.


У меня есть следующий код Objective-C:

NSData *photoData = [NSData dataWithContentsOfFile:photoPath];

NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"photo-file\"; filename=\"%@\"\r\n", " my-photo.jpg"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:photoData];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];

[request addValue:[NSString stringWithFormat:@"%d", body.length] forHTTPHeaderField: @"Content-Length"];

[[NSURLConnection alloc] initWithRequest:request delegate:appDelegate];

[photoData release];
[body release];
[request release];

Я пытаюсь опубликовать изображение с iPhone на сервере node.js, который использует node-formidable.Сервер уже работает нормально с изображениями, отправленными из браузера, но когда я пытаюсь опубликовать с моего iPhone, я получаю следующую ошибку:

Ошибка: MultipartParser.end (): поток неожиданно завершился в MultipartParser.end (/formidable/1.0.0/package/lib/formidable/multipart_parser.js:301:12) в IncomingMessage.anonymous (formidable / 1.0.0 / package / lib / formidable /coming_form.js: 80: 30) вIncomingMessage.emit (events.js: 61: 17) в HTTPParser.onMessageComplete (http.js: 132: 23) в Socket.ondata (http.js: 1001: 22) в Socket._onReadable (net.js: 677: 27) в IOWatcher.onReadable как обратный вызов (net.js: 177: 10)

Изображение правильно сохранено во временной папке сервера , но это формула узлатот, который выдает ошибку при попытке разобрать форму.

Ответы [ 3 ]

5 голосов
/ 11 мая 2011

Видимо, грозный довольно требователен к конечной границе.Попробуйте это:

 NSMutableData* body = [NSMutableData data];    
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image\"; filename=\"%@\"\r\n", imageName] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Type: %@\r\n\r\n", @"image/jpeg"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[urlRequest setHTTPBody:body];
0 голосов
/ 16 апреля 2011

[request release];

Я полагаю, что вы очищаете объект запроса до того, как он отправит все данные.Это объясняет неожиданный выход из потока.

0 голосов
/ 16 апреля 2011

Я не знаю, в чем именно проблема. Я предлагаю вам установить инструмент, который может показать вам разницу между этими двумя запросами при загрузке изображения из браузера и вашего приложения. Самый известный инструмент http://www.wireshark.org/. Или некоторые несвободные инструменты, такие как httpscoop (http://www.tuffcode.com/download.html, 14-дневная пробная версия). Мне лично они оба нравятся.

Как только вы найдете разницу, вы можете настроить код своего приложения так, чтобы он отправлял точно такой же запрос, который решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...