2013-09-04 10 views
6

Sto sviluppando un'applicazione iOS e sto utilizzando node.js per lo scripting lato server. Sto affrontando un problema nel caricare l'immagine sul server dall'app iOS. Funziona bene se sto caricando l'immagine dal modulo della pagina web. Ma se si carica da lato app non funziona.Caricamento dell'immagine sul server tramite node.js da un'app iOS

//test file 
h3 Pic Upload 
form(action='/pic_upload', method='post',enctype='multipart/form-data') 
    | user_pic: 
    input(type='file', name='user_pic') 
    input(type='submit') 

//app.js 
var userlogin =require('./routes/userlogin'); 
app.post('/pic_upload', userlogin.picUpload); 

//userlogin.js 
//picUpload function 
exports.picUpload = function(req, res) { 
console.log(req.files); // showing undefined, when called from IOS app 
// pic upload script... 
}); 

Ho provato a inviare l'immagine dal lato dell'app come parametro dati o file ma non ha funzionato. Come inviare i parametri del file dal lato app in modo che possa facilmente caricare l'immagine sul server? Gentilmente suggerire un modo per affrontare il problema.

+0

Puoi mostrare il tuo codice lato client? – Orifjon

risposta

8

Questo codice funziona nella mia app. Prova questo.

NSData *imgData = UIImageJPEGRepresentation(newImg, 0.2); 

NSString *str = @"displayImage"; 

    NSString *urlString = @"http://some.url.com/post"; 

    // create request 
    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"]; 

    // set Content-Type in HTTP header 
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; 
    [request setValue:contentType forHTTPHeaderField: @"Content-Type"]; 

    // post body 
    NSMutableData *body = [NSMutableData data]; 

    // add params (all params are strings) 
     [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]]; 


    // add image data 
    if (imgData) { 
     [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     // [body appendData:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"displayImage\"; filename=\"image.jpg\"\r\n"]]; 
     [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"image.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]]; 

    // setting the body of the post to the reqeust 
    [request setHTTPBody:body]; 

    // set URL 
    [request setURL:[NSURL URLWithString:urlString]]; 

    NSString *bodyStr = [[NSString alloc]initWithData:body encoding:NSUTF8StringEncoding]; 
    NSLog(@" %@",bodyStr); 

    NSURLConnection *lot_Connection=[[NSURLConnection alloc]initWithRequest:request delegate:self]; 

    if(lot_Connection) 
    { 
     webdata = [[NSMutableData alloc] init]; 

    } 
+0

Come si ottiene questa immagine dal server nodejs? Da "request.body" o "request.file"? Potresti fare un esempio –

Problemi correlati