使用多方将图像从ipad app上传到节点js服务器

我是非常新的JavaScript和节点js。 我正在从我的iPad应用程序上传图像,以使用多方模块来rest节点js(快速js)的api。

这是我在目标c中的图像上传代码。

NSData *imgData = UIImageJPEGRepresentation(img.image, 0.2); NSString *urlString = @"http://localhost:3000/api/uploadimage"; NSString *str = @"displayImage"; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData]; [request setHTTPShouldHandleCookies:NO]; [request setTimeoutInterval:30]; [request setURL:[NSURL URLWithString:urlString]]; [request setHTTPMethod:@"POST"]; NSString *boundary = [NSString stringWithFormat:@"---------------------------14737809831464368775746641449"]; NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; [request setValue:contentType forHTTPHeaderField: @"Content-Type"]; NSMutableData *body = [NSMutableData data]; [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"currentEventID\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[@"52344457901000006" dataUsingEncoding:NSUTF8StringEncoding]]; if (imgData) { [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; // [body appendData:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"displayImage\"; filename=\"myimage.jpg\"\r\n"]]; [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"myimage.jpg\"\r\n", str] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:imgData]; [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; } [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [request setHTTPBody:body]; [request setURL:[NSURL URLWithString:urlString]]; NSLog(@"HttpBody = %@",request.HTTPBody); connectionSave = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

请求正文数据打印在控制台上。

为了得到服务器端的图像,我指的是这个例子。 [ https://github.com/strongloop/express/blob/master/examples/multipart/index.js] [1 ]

在这个例子中,他们正在创buildvar form = new multiparty.Form(); 在后期的方法。 但我从应用程序发送图像而不是从浏览器,所以我没有任何forms的inputtypes被定义。 我如何编写这个REST API来获取图像和其他string参数?

 var express = require('express'); var http = require('http'); var util = require('util') var multiparty = require('multiparty'); var app = express(); var bodyParser = require('body-parser'); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({limit:'10mb', extended: true})); app.use(bodyParser.json({limit:'10mb'})); app.post('/api/uploadimage', function(req, res, next){ var form = new multiparty.Form(); console.log(req.body); }); 

另外我得到req.body空。 提前致谢!! 🙂

你的目标代码看起来很完美。 你需要使用connect-multiparty模块。 这里是保存文件的示例代码。

  app.post('/api/uploadimage', multipartMiddleware, function(req, res) { console.log(req.body, req.files); // check console fs.readFile(req.files.urForm-data_name.path, function (err, data) { //here get the image name and other data parameters which you are sending like image name etc. fs.writeFile(newPath, data, function (err) { }); //dont forgot the delete the temp files. }); }); 

我不知道iOS代码是对还是错,但在nodejs的情况下,你应该使用multiparty作为中间件,你可以使用connect-multiparty

 var multipart = require('connect-multiparty'); var multipartMiddleware = multipart(); app.use(require('body-parser').urlencoded({ extended: true })) app.post("/api/upload", multipartMiddleware, function(req, res){ files = req.files; // Do .... });