Ich bin sehr neu zu Javascript und Node js. Ich arbeite daran, Bild von meiner iPad App zu laden, um api von Node js (express js) mit Multiparty-Modul zu ruhen.Bild von ipad app auf Knoten js Server hochladen mit Multiparty
Hier ist mein Bild Upload-Code in Ziel 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];
Anfragedaten werden auf Konsole gedruckt.
Um das Bild auf der Serverseite zu bekommen, verweise ich auf dieses Beispiel.
In diesem Beispiel erstellen sie var form = new multiparty.Form(); in Post-Methode. Aber ich sende Bild von der Anwendung nicht vom Browser, so habe ich kein Formular, in dem Eingabearten definiert sind. Wie kann ich diese REST-API schreiben, um das Bild und andere String-Parameter zu erhalten?
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);
});
Auch ich bekomme req.body leer. Vielen Dank im Voraus! :)
Ich kann nicht mit dem node.js Zeug sprechen, aber Sie scheinen ein zusätzliches \ r \ n direkt nach dem Hinzufügen von 'imgData' und vor dem letzten" - (Grenze) - " Terminator. Mein Verständnis ist, dass Sie nur ein \ r \ n nach der Nutzlast und dem nächsten Grenztrennzeichen wollen. – Rob
Danke, aber ich denke nicht, dass das ein Problem verursachen wird :) – jasmine
Aber es gibt ein Problem: Sie fügen unnötigerweise zwei Bytes, '0d 0a', an das Ende der Datei. Es stellt sich heraus, dass die meisten Bildroutinen diese zusätzlichen Bytes ignorieren, aber dies ist nicht korrekt. – Rob