Ios 使用多方将图像从ipad应用程序上载到node js服务器

Ios 使用多方将图像从ipad应用程序上载到node js服务器,ios,node.js,express,image-uploading,multipartform-data,Ios,Node.js,Express,Image Uploading,Multipartform Data,我对javascript和NodeJS非常陌生。 我正在使用多方模块将图像从我的iPad应用程序上传到node js(express js)的rest api 这是我在objective c中的图像上传代码 NSData *imgData = UIImageJPEGRepresentation(img.image, 0.2); NSString *urlString = @"http://localhost:3000/api/uploadimage"; NSString *str = @"dis

我对javascript和NodeJS非常陌生。 我正在使用多方模块将图像从我的iPad应用程序上传到node js(express js)的rest api

这是我在objective 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];
请求正文数据打印在控制台上

为了在服务器端获取图像,我引用了这个示例。 [

在本例中,他们正在post方法中创建var form=new multiparty.form()。 但我是从应用程序而不是从浏览器发送图像,所以我没有任何定义输入类型的表单。我如何编写RESTAPI来获取图像和其他字符串参数

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);
});
我也得到了要求的机构空。
提前感谢!!:)

我不知道iOS代码是对是错,但在nodejs的情况下,您应该使用
多方
作为中间件,您可以使用


你的目标代码看起来很完美。 您需要使用连接多方模块。 下面是保存文件的示例代码

    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.
        });
     });

我无法与node.js内容对话,但您似乎在添加
imgData
之后和最后一个“-(边界)-terminator。我的理解是,在有效负载和下一个边界分隔符之后只需要一个。\r\n。谢谢,但我认为这不会产生任何问题:)但有一个问题:您在文件末尾不必要地添加了两个字节,
0d 0a
。事实证明,大多数图像例程都会忽略这些额外的字节,但它是存在的这样做是正确的。你是对的。我删除了额外的\r\n。谢谢。我正在处理它,并且能够在临时位置找到该文件。再次感谢!!如何删除临时文件@jasmine@ChenyaZhang您可以使用fs.unlink(临时文件路径)
    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.
        });
     });