2013-03-14 11 views
22

Nella mia app iOS voglio caricare il file con l'API java usando NSMutableURLRequest per file multipart. ecco la forma che mostra il parametro.iPhone carica file multipart utilizzando AFNetworking

<form action="API_URL" encType='multipart/form-data' method=post> 
      <input type=file name="files"> 
      <input type=submit value="Upload Attempt Files"> 

EDIT form2

 <form action='URL' method="post" encType='multipart/form-data'> 
<input name="key1" value='123'> 
<input name="key2" value='asdf'> 
<input name="key3" value='qwerty'> 
<input name="key4" value='aaa'> 
<input name="key5" value='aaa'> 
<input name="key6" value='false'> 
<input type="file" name="files"> 
<input type=submit value="Create Forum Posts"> 
    </form>   

Come posso raggiungere questo obiettivo.

qui questo Question mostra come caricare file multipart utilizzando AFNetworking in iOS (obiettivo c). Ma non sto ottenendo come inserire parametri come da modulo che sto usando.

prega di aiutare e suggerire

+1

faccio a modo corretto supporre che si vuole fare questo caricamento via AFNetworking in Objective-C? (Il riferimento a "Java API" è confuso, ma suppongo che tu stia solo dicendo che stai usando Java sul server. È vero?) – Rob

+0

ya dall'obiettivo c Sto chiamando l'API scritta in java sul server – ios

+0

Ok . L'app per iOS non si preoccupa di quale tecnologia il server utilizza dietro le quinte, perché comunica via HTTP e questo è ciò che ci interessa davvero qui. Il tag "java" e i riferimenti nella tua domanda potrebbero mandare i lettori sulla strada sbagliata. Potresti voler rimuovere quei riferimenti ... – Rob

risposta

77

Guardando il tuo HTML, il name del vostro <input type=file> è files, e, quindi, è necessario utilizzare @"files" come parametro al metodo nameappendPartWithFileData. Ad esempio, con AFNetworking 3.x:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 

[manager POST:urlString parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
    [formData appendPartWithFileData:imageData 
           name:@"files" 
          fileName:photoName mimeType:@"image/jpeg"]; 

    [formData appendPartWithFormData:[key1 dataUsingEncoding:NSUTF8StringEncoding] 
           name:@"key1"]; 

    [formData appendPartWithFormData:[key2 dataUsingEncoding:NSUTF8StringEncoding] 
           name:@"key2"]; 

    // etc. 
} progress:nil success:^(NSURLSessionDataTask *task, id responseObject) { 
    NSLog(@"Response: %@", responseObject); 
} failure:^(NSURLSessionDataTask *task, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 

(per AFNetworking 1.xe 2.x sintassi, vedere la cronologia delle revisioni di questa risposta.)

+0

Grazie per l'aiuto .... qui come inviare i dati dei cookie per l'autenticazione .. Un'altra cosa che mai richiesta che sto inviando non è visibile sul server cosa potrebbe essere sbagliato ... – ios

+0

@ios Non sono sicuro che i cookie, ma forse [questa risposta] (http://stackoverflow.com/questions/10984374/how-to-manage-sessions-with-afnetworking) aiuta. Per quanto riguarda il motivo per cui non funziona, non posso dirlo, perché l'ho provato sul mio server e il file si è mostrato bene. Ma se hai bisogno di dati sui cookie per l'autenticazione e non l'hai fatto, ti aspetti che funzioni? Indipendentemente da ciò, modifica la tua domanda, aggiungendo l'ultima versione del tuo codice di caricamento. – Rob

+0

qui ho anche un'altra forma: modulo 2 come mostrato in domanda. Come lavorare con quello? Si prega di aiutare – ios

3
-(void) makePhotoUploadRequest{ 

    NSArray *keys = [[NSArray alloc]initWithObjects:@"UserID", @"CompanyName" ,@"Location",@"Latitude",@"Longitude",@"Tagline",@"Goals",@"ColorName",nil]; 
    NSArray *values =[[NSArray alloc]initWithObjects:@"103",@"queppelin",@"Jaiur",@"11.3" ,@"12.3",@"Let's do it",@"Let's do it",@"Let's do it", nil]; 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 

    NSURL *baseUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@/%@/RegisterCompanyUser",serverRequest,serverPort,serverName]]; 

    NSString *charset = (NSString *)CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)); 
    [request setURL:baseUrl]; 
    [request setHTTPMethod:@"POST"]; 

    NSString *boundary = @"0xKhTmLbOuNdArY"; 
    NSString *endBoundary = [NSString stringWithFormat:@"\r\n--%@\r\n", boundary]; 

    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; charset=%@; boundary=%@", charset, boundary]; 
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 

    NSMutableData *tempPostData = [NSMutableData data]; 
    [tempPostData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 


      for(int i=0;i<keys.count;i++){ 
       NSString *str = values[i]; 
       NSString *key =keys[i]; 
       NSLog(@"Key Value pair: %@-%@",key,str); 
       [tempPostData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]]; 
       [tempPostData appendData:[str dataUsingEncoding:NSUTF8StringEncoding]]; 
       // [tempPostData appendData:[@"\r\n--%@\r\n",boundary dataUsingEncoding:NSUTF8StringEncoding]]; 
        [tempPostData appendData:[endBoundary dataUsingEncoding:NSUTF8StringEncoding]]; 

     } 





    // Sample file to send as data 
    [tempPostData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"Image\"; filename=\"%@\"\r\n", @"company-logo.png"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [tempPostData appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 

    UIImage *myImageObj = [UIImage imageNamed:@"company-logo.png"]; 
    NSData *mydata= UIImagePNGRepresentation(myImageObj); 
    NSLog(@"Image data:%d",mydata.length); 
     [tempPostData appendData:mydata]; 

    [tempPostData appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [request setHTTPBody:tempPostData]; 

    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    if(theConnection) 
    { 
     dataWebService = [NSMutableData data] ; 
     NSLog(@"request uploading successful"); 
    } 
    else 
    { 
     NSLog(@"theConnection is NULL"); 
    } 


} 
Problemi correlati