php iphone upload asihttprequest

php - Cargar archivo en el servidor desde el iPhone usando ASIHTTPRequest



upload (2)

He intentado subir un archivo ( login.zip ) usando las librerías ASIHTTPRequest desde el iPhone al servidor Apache incorporado en Mac OS X Snow Leopard. Mi código es:

NSString *urlAddress = [[[NSString alloc] initWithString:self.uploadField.text]autorelease]; NSURL *url = [NSURL URLWithString:urlAddress]; ASIFormDataRequest *request; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"login.zip"]; NSData *data = [[[NSData alloc] initWithContentsOfFile:dataPath] autorelease]; request = [[[ASIFormDataRequest alloc] initWithURL:url] autorelease]; [request setPostValue:@"login.zip" forKey:@"file"]; [request setData:data forKey:@"file"]; [request setUploadProgressDelegate:uploadProgress]; [request setShowAccurateProgress:YES]; [request setDelegate:self]; [request startAsynchronous];

El código php es:

<?php $target = "upload/"; $target = $target . basename( $_FILES[''uploaded''][''name'']) ; $ok=1; if(move_uploaded_file($_FILES[''uploaded''][''tmp_name''], $target)) { echo "The file ". basename( $_FILES[''uploadedfile''][''name'']). " has been uploaded"; } else { echo "Sorry, there was a problem uploading your file."; } ?>

No entiendo muy bien por qué el archivo no se está cargando. Si alguien pudiera ayudarme Me he quedado en esto por 5 días seguidos.

Gracias de antemano Nik


¿Hay una falta de coincidencia en los nombres de campo que estás usando?

Parece que estás usando "archivo" en el iphone:

[request setPostValue:@"login.zip" forKey:@"file"];

pero ''cargado'' en el servidor:

$target = $target . basename( $_FILES[''uploaded''][''name'']) ;

Intenta cambiar estos para que sean iguales.


Prueba esto:

[request setFile:filePath forKey:@"file"];

o si puede poner su archivo zip en NSData como este

NSData *zipData = [[NSData alloc] initWithContentsOfFile:zipName];

y enviarlo al servidor con

[request setData:zip forKey:@"file"];

en el servidor prueba esto

<?php $dir = "/var/www/your_directory/"; $path = $dir . $_FILES[''file''][''name'']; //move_uploaded_file($_FILES[''file''][''tmp_name''], $path); if(move_uploaded_file($_FILES[''file''][''tmp_name''], $path)) { //return ok! :) } else { // return -> echo"There''s been a problem uploading your file. Please try again"; } ?>

en $_FILES[''file''][''name''] el [''file''] DEBE ser el mismo que forKey:@"file" en su solicitud