2011-05-07 11 views
7

He subir una imagen al servidor para que escribí código usando NSMutableURLRequest como estoiPhone: subir una imagen al servidor usando ASIFormDataRequest

NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"]; 
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; 
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 
// 
// /* 
// now lets create the body of the post 
// */ 
    NSMutableData *body = [NSMutableData data]; 
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];  
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"ipodfile%@.jpg\"\r\n",self.fileID] 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]]; 

supongo que mi responden script PHP que corresponde a esto y está trabajando bien

¿cómo puedo replicar arriba en ASIFormDataRequest?

tratado de hacer esto

ASIFormDataRequest* request = [ASIFormDataRequest requestWithURL: 
           [NSURL URLWithString:photoUploadURLString]]; 


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=\"userfile\"; filename=\"ipodfile%@.jpg\"\r\n",self.fileID] 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]]; 

[request addData:body withFileName:filename andContentType:@"image/jpeg" forKey:@"snapshot[image]"]; 
request.uploadProgressDelegate = self.progressView; 
[request setDidFinishSelector:@selector(getFacebookPhotoFinished:)]; 

pero aún no ha conseguido éxito?

aquí están los detalles de mis scripts PHP

<?php 

$uploaddir = './uploads/'; 
$file = basename($_FILES['userfile']['name']); 
$uploadfile = $uploaddir . $file; 

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { 
     echo "http://example.com/uploads/{$file}"; 
} 

?> 

que hice como por Cipriano de carga de archivos

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"images/ipodfile%@.jpg", fileID]]; 
NSData *imageData = UIImageJPEGRepresentation([itemImageView image], 0.05); 
if (imageData != nil) { 
    [imageData writeToFile:savedImagePath atomically:YES]; 
} 
if ([[NSFileManager defaultManager] createFileAtPath:savedImagePath contents:imageData attributes:nil]) 
{ 
    NSLog(@"Image saved"); 
} else { 
    NSLog(@"Image not saved"); 
}   


[activityIndicator startAnimating]; 
NSString *photoUploadURLString = @"http://example.com/imageuploader.php"; 

NSString* filename = [NSString stringWithFormat:@"ipodfile%@.jpg", self.fileID]; 
NSLog(@"url is %@/%@",photoUploadURLString, filename); 

UIImage *newImage = [[UIImage alloc] init]; 
newImage=[itemImageView image]; 
NSURL *url=[NSURL URLWithString:photoUploadURLString]; 

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
[request setPostValue:@"userfile" forKey:@"name"]; 
[request setPostValue:filename forKey:@"filename"]; 

[request setData:imageData withFileName:filename andContentType:@"image/jpeg" forKey:@"snapshot[image]"]; 
+0

¿Puede ser más específico sobre qué va mal? –

+0

mi pregunta es simple, ¿cómo puedo publicar la imagen utilizando la solicitud ASIHTTP para que el script PHP mencionado anteriormente puede guardar la imagen en el directorio de carga –

+0

¿No hay ningún error? No hay respuesta del servidor? Difícil de decir qué pasa aquí. Proporcione algunos detalles más, no puedo adivinar qué está mal en su código. –

Respuesta

13

al servidor utilizando ASIFormDataRequest

-(void)uploadFile{ 
     NSURL *url = [NSURL URLWithString: photoUploadURLString]; 

     ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 

     [request setUseKeychainPersistence:YES]; 
     //if you have your site secured by .htaccess 

     //[request setUsername:@"login"]; 
     //[request setPassword:@"password"]; 


     NSString *fileName = [NSString stringWithFormat:@"ipodfile%@.jpg",self.fileID]; 
     [request addPostValue:fileName forKey:@"name"]; 

     // Upload an image 
     NSData *imageData = UIImageJPEGRepresentation([UIImage imageName:fileName]) 
     [request setData:imageData withFileName:fileName andContentType:@"image/jpeg" forKey:@"userfile"]; 

     [request setDelegate:self]; 
     [request setDidFinishSelector:@selector(uploadRequestFinished:)]; 
     [request setDidFailSelector:@selector(uploadRequestFailed:)]; 

     [request startAsynchronous]; 
} 

- (void)uploadRequestFinished:(ASIHTTPRequest *)request{  
    NSString *responseString = [request responseString]; 
     NSLog("Upload response %@", responseString); 
} 

- (void)uploadRequestFailed:(ASIHTTPRequest *)request{ 

     NSLog(@" Error - Statistics file upload failed: \"%@\"",[[request error] localizedDescription]); 
} 

Nota yo estaba escribiendo de memoria así que puedes tener algunos errores ortográficos.

+0

no funciona para mí –

+0

funcionará si aclara lo siguiente: ¿Qué parámetros desea enviar? Cuéntame el contenido y los pares de claves como este: 'nombre de archivo para la clave" nombre "' ... y así sucesivamente – Cyprian

+0

ver mis entradas en mis ediciones de preguntas –

2
NSString *strURL = @"enter uerl hear..."; 

//  ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:strURL]]; 
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:strURL]]; // Upload a file on disk 
NSString *filename1=[NSString stringWithFormat:@"friendship.jpg"]; 
UIImage *image1=[UIImage imageNamed:filename1]; 
NSData *imageData1=UIImageJPEGRepresentation(image1, 1.0); 
[request setData:imageData1 withFileName:filename1 andContentType:@"image/jpeg" forKey:@"avatar"]; 
[request setRequestMethod:@"POST"]; 
//[request appendPostData:body]; 
[request setDelegate:self]; 
[request setTimeOutSeconds:3.0]; 
request.shouldAttemptPersistentConnection = NO; 
[request setDidFinishSelector:@selector(uploadRequestFinished:)]; 
[request setDidFailSelector:@selector(uploadRequestFailed:)]; 
[request startAsynchronous]; 


- (void)uploadRequestFinished:(ASIHTTPRequest *)request 
{ 
NSLog(@" Error - Statistics file upload failed: \"%@\"",[request responseString]); 
} 

- (void)uploadRequestFailed:(ASIHTTPRequest *)request{ 
NSLog(@" Error - Statistics file upload failed: \"%@\"",[[request error] localizedDescription]); 

} 
+0

tu código funciona muy bien, ¿cómo paso el parámetro de texto con el archivo? Cuando intento, obtengo la excepción + 1 – RollRoll

+0

¿Cómo subir varias imágenes al servidor utilizando el mismo parámetro? – IKKA

Cuestiones relacionadas