Sono molto nuovo su javascript e nodo js. Sto lavorando al caricamento di un'immagine dalla mia app per iPad per riposare API del nodo js (express js) utilizzando il modulo multiparty.caricare l'immagine dall'app per ip al nodo server js utilizzando multiparty
Ecco il mio codice di caricamento dell'immagine nell'obiettivo 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];
I dati del corpo della richiesta vengono stampati su console.
Per ottenere immagini sul lato server, mi riferisco a questo esempio. [https://github.com/strongloop/express/blob/master/examples/multipart/index.js][1]
In questo esempio, stanno creando var form = new multiparty.Form(); nel metodo post. Ma sto inviando l'immagine dall'applicazione non dal browser, quindi non ho alcuna forma in cui sono definiti i tipi di input. Come posso scrivere questa API REST per ottenere l'immagine e altri parametri di stringa?
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);
});
Anche io sto ricevendo req.body vuoto. Grazie in anticipo !! :)
Non riesco a parlare con il file node.js, ma sembra che tu stia aggiungendo un \ r \ n extra subito dopo aver aggiunto 'imgData' e prima dell'ultimo" - (boundary) - " Terminator. La mia comprensione è che vuoi solo uno \ r \ n dopo il carico utile e il prossimo separatore di limiti. – Rob
Grazie, ma non penso che creerà alcun problema :) – jasmine
Ma c'è un problema: stai aggiungendo inutilmente due byte, '0d 0a', alla fine del file. Si scopre che la maggior parte delle routine di immagine ignorerà questi byte extra, ma non è corretto farlo. – Rob