繁体   English   中英

我如何正确地将文件从iPhone发布到使用node-formidable的node.js服务器?

[英]How do I correctly post a file from an iPhone to a node.js server that is using node-formidable?

更新 :此问题已于2011年5月16日在phonegap github存储库中修复。


我有以下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-formidable的node.js服务器。 服务器已经可以很好地处理从浏览器发布的图像,但是当我尝试从iPhone发布时,出现以下错误:

错误:MultipartParser.end():流意外终止于IncomingMessage上的MultipartParser.end(/formidable/1.0.0/package/lib/formidable/multipart_parser.js:301:12)。匿名(formidable / 1.0.0 / package / Socket.ondata(http.js:1001:22)处HTTPParser.onMessageComplete(http.js:132:23)处IncomingMessage.emit(events.js:61:17)处的lib / formidable / incoming_form.js:80:30) )在IOWatcher.onReadable的Socket._onReadable(net.js:677:27)作为回调(net.js:177:10)

图像已正确保存在服务器的temp文件夹中 ,但是它是节点可格式化的,在尝试解析该表单时会引发错误

显然,强大的结束边界很挑剔。 尝试这个:

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

我不知道到底是什么问题。 我建议您安装一个工具,该工具可以显示从浏览器和应用上传图片时这两个请求之间的区别。 最著名的工具是http://www.wireshark.org/ 或一些免费的工具,例如httpscoop(http://www.tuffcode.com/download.html,试用14天)。 我个人都喜欢。

找到差异后,您可以调整您的应用代码,使其发送的请求完全相同,这将解决您的问题。

[request release];

我猜您在发送所有数据之前清理了请求对象。 这将解释意外的流出口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM