将图像从ipad应用程序上传到使用多方的节点js服务器 [英] upload image from ipad app to node js server using multiparty
问题描述
我正在从iPad应用程序上传图像到使用多方模块的节点js(express js)的休息。
这是我的图像上传代码在目标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];
[请求setHTTPShouldHandleCookies:NO];
[request setTimeoutInterval:30];
[request setURL:[NSURL URLWithString:urlString]];
[请求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\\\
- %@ \\\,boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@Content-Disposition:form-data; name = \currentEventID\\r\\\
\r\\\
] dataUsingEncoding:NSUTF8StringEncoding] ]。
[body appendData:[@52344457901000006dataUsingEncoding:NSUTF8StringEncoding]];
if(imgData){
[body appendData:[[NSString stringWithFormat:@\r\\\
- %@ \\\\
,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\\\
\r\\\
dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:imgData];
[body appendData:[[NSString stringWithFormat:@\r\\\
] dataUsingEncoding:NSUTF8StringEncoding]];
}
[body appendData:[[NSString stringWithFormat:@\r\\\
- %@ - \r\\\
,boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[请求setHTTPBody:body];
[请求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]
在这个例子中,他们正在创建var form = new multiparty.Form();在后方法。
但是我从应用程序发送的图像不是从浏览器,所以我没有任何形式的输入类型被定义。如何编写这个REST API以获取图像和其他字符串参数?
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); //检查控制台
fs.readFile(req.files.urForm-data_name.path,function(err,data){
//这里得到您像图像名称等发送的图像名称和其他数据参数。
fs.writeFile(newPath,data,function(err){
});
// dont忘记删除临时文件
});
});
I am very new to javascript and node js. I am working on uploading image from my iPad app to rest api of node js(express js) using multiparty module.
Here is my image upload code in 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];
Request body data is printed on console.
For getting image on server side I am referring this example. [https://github.com/strongloop/express/blob/master/examples/multipart/index.js][1]
In this example, they are creating var form = new multiparty.Form(); in post method. But I am sending image from application not from browser so I don’t have any form in which input types are defined. How can I write this REST API to get the image and other string parameters?
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);
});
Also I am getting req.body empty. Thanks in Advance!! :)
your objective code is looking perfect. You need to use connect-multiparty module. Here is the sample code to save the file.
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.
});
});
这篇关于将图像从ipad应用程序上传到使用多方的节点js服务器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!