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