2012-06-29 8 views
10

Come posso caricare sul server alcune informazioni di testo (una stringa di testo) e un file di immagine sulla stessa richiesta di post http. Ho caricato le immagini da solo, ma non riesco a far funzionare il testo con esso. Grazie!Come inviare dati di post e file di immagine al server Xcode

+0

Quale servizio è questo? –

+0

Obiettivo c, Questa è una domanda simile, ma ho bisogno di un testo. – sebi

+0

http://stackoverflow.com/questions/125306/how-can-i-upload-a-photo-to-a-server-with-the-iphone – sebi

risposta

18

Usa questo codice per caricare immagini e textLabel

NSData *imageData = UIImageJPEGRepresentation("yourImage",0.2);  //change Image to NSData 

if (imageData != nil) 
{ 
    filenames = [NSString stringWithFormat:@"TextLabel"];  //set name here 
     NSLog(@"%@", filenames); 
    NSString *urlString = @"http://xxxxxxx/yyyyy.php"; 

    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
    [request setURL:[NSURL URLWithString:urlString]]; 
     [request setHTTPMethod:@"POST"]; 

     NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"]; 
     NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; 
    [request addValue: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=\"filenames\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[filenames dataUsingEncoding:NSUTF8StringEncoding]]; 

    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];  
    [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"userfile\"; filename=\".jpg\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 

     [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[NSData dataWithData:imageData]]; 
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    // setting the body of the post to the reqeust 
    [request setHTTPBody:body]; 
    // now lets make the connection to the web 
    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
    NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 
    NSLog(returnString); 
    NSLog(@"finish"); 
} 

Nell'uso lato php questo codice

$myparam = $_POST['userfile'];  //getting image Here 
$mytextLabel= $_POST['filenames'] //getting textLabe Here 
echo $myparam; 
echo $mytextLabel;  
$target_path = "uploads/"; 
$target_path = $target_path . basename($_FILES['myfile']['name']);   

if(move_uploaded_file($_FILES['myfile']['tmp_name'], $target_path)) { 
    echo "The file ". basename($_FILES['myfile']['name']) . " has been uploaded"; 
} else { 
    echo "There was an error uploading the file, please try again!"; 
} 
+0

Non posso dire dove viene impostata l'etichetta di testo qui, diciamo che il testo è "buongiorno". Dove dovrebbe andare in questo codice? – sebi

+0

Ho aggiornato la mia risposta .. – akk

+0

Ok grazie capito, btw non ho usato nessuno dei nomi di asset, o caratteri, perché non sono sicuro di cosa faccia. – sebi

4

Basta aggiungere seguente metodo On pulsante On Click:

-(void) uploadImage 
{ 
    prodNam = txtProdName.text; 
    UIImage * img = [UIImage imageNamed:@"SRT2.jpg"]; 
    NSData *imageData = UIImageJPEGRepresentation(img,0.2);  //change Image to NSData 

    if (imageData != nil) 

    { 
     NSString * filenames = [NSString stringWithFormat:@"TextLabel"]; 
     NSLog(@"%@", filenames); 

     NSString *urlString = @"http://dev9.edisbest.com/upload_image.php"; 

     NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ; 
     [request setURL:[NSURL URLWithString:urlString]]; 
     [request setHTTPMethod:@"POST"]; 

     NSString *boundary = @"---------------------------14737809831466499882746641449"; 
     NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; 
     [request addValue: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=\"filenames\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[filenames dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[@"Content-Disposition: form-data; name=\"userfile\"; filename=\"TestEdreamzIpad.jpg\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[NSData dataWithData:imageData]]; 
     [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [request setHTTPBody:body]; 
     NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
     NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 
     NSLog(@"Response : %@",returnString); 

     if([returnString isEqualToString:@"Success ! The file has been uploaded"]) 
     { 
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Success" message:@"Image Saved Successfully" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil]; 

      [alert show]; 
     } 
    NSLog(@"Finish"); 
    } 
} 

Puoi metti qualsiasi immagine nella posizione di "SRT2.jpg" della tua gerarchia locale xcode.

Tutto il meglio ...

+1

Ehi, puoi caricare anche il tuo PHP COde? Ho provato il tuo codice ma dice sempre "C'è stato un errore nel caricare il file, per favore riprova!" E non ci sono dati compaiono sul mio server ... –

+2

@ LaurenzGlück: Codice Per:? upload_image.php "iphonetest" è la directory del server inserita nella directory principale. Usa e rispondi è degno di te? – Pushkraj

+0

@ LaurenzGlück: Pushkraj

1

miei servizi web è questo uno e che sta funzionando bene!

<?php 


$fp = fopen("./trace.txt", "w"); //creates a file to trace your data 
fwrite($fp,"get \n"); 
fwrite($fp, print_r($_GET, true)); 
fwrite($fp,"POST \n"); 
fwrite($fp, print_r($_POST, true));//displays the POST 
fwrite($fp,"FILES \n"); 
fwrite($fp,print_r($_FILES,true));//display the FILES 
fclose($fp); 


$myparam = $_POST["userfile"]; 
$mytextLabel = $_POST['filenames']; 
echo $myparam; 
echo $mytextLabel; 


$uploadDir = 'uploads/'; //you must create this directory 
$uploadDir = $uploadDir.basename($_FILES['myfile']['name']); //saves the picture inside that folder 


$file = basename($_FILES['uploaded']['name']); 
//$uploadedFile = $uploadDir.$file; 
//move_uploaded_file($_FILES['uploaded']['tpm_name']); 


if(move_uploaded_file($_FILES['myfile']['tpm_name'],$uploadDir)){ 
echo "the file ".basename($_FILES['myfile']['name'])." has been uploaded" ; 
}else{ 

echo "error"; 
} 

?> 
2

Semplicemente Utente SVHttp Request per caricare file sul server.

invio imageFile e altri animali nel parametro:

NSMutableDictionary *data = [[NSMutableDictionary alloc] init]; 
    [data setObject:imageData forKey:@"image"]; 
    [data setObject:@"saveimage" forKey:@"action"]; 
    [data setObject:userId forKey:@"userid"]; 
    [data setObject:@"png" forKey:@"type"]; 

e di domandare:

SVHTTPClient *request = [SVHTTPClient sharedClient]; 

    [request setBasicAuthWithUsername:nil password:nil]; 
    [request setSendParametersAsJSON:NO]; 



    [request POST:[NSString stringWithFormat:@"http://bylyngo.com/getapi/?action=saveimage&userid=%@&type=png",userId] 
     parameters:data 
     progress:^(float progress) { 

      NSLog(@"Uploading (%.0f%%)", progress*100); 

     }]; 

Otterrete i progressi ancora.

:)

Problemi correlati