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

标签 iphone objective-c ios node.js http-headers

更新:此问题已于 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 发布图像时,出现以下错误:

Error: MultipartParser.end(): stream ended unexpectedly at MultipartParser.end (/formidable/1.0.0/package/lib/formidable/multipart_parser.js:301:12) at IncomingMessage.anonymous (formidable/1.0.0/package/lib/formidable/incoming_form.js:80:30) at IncomingMessage.emit (events.js:61:17) at HTTPParser.onMessageComplete (http.js:132:23) at Socket.ondata (http.js:1001:22) at Socket._onReadable (net.js:677:27) at IOWatcher.onReadable as callback (net.js:177:10)

图像已正确保存在服务器的临时文件夹中,但是在尝试解析表单时,它是一个 Node 强大的会引发错误的 Node

最佳答案

显然,强大对于终点的边界是相当挑剔的。试试这个:

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

关于iphone - 如何正确地将文件从 iPhone 发布到使用 node-formidable 的 node.js 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5684649/

相关文章:

ios - iOS中如何在UITableView中添加UIProgressView

objective-c - IOS:无法从 presentedViewController 访问 presentingViewController 的属性和方法

ios - 如何在 SwiftUI 中获取 iPhone 的屏幕宽度?

ios - 在ios7中隐藏键盘

ios - 在 iOS 上发送 HTTP POST 请求

ios - NSDictionary - 需要获取键子元素的值

ios - iAd 错误 Cannot create a session after the response has committed

iphone - iOS 应用程序更新折扣

ios - 在 NSMutableArray Objective-C 中调用 UIButton 对象的方法

objective-c - 强/弱/保留/__unsafe_unretained/分配