2009-08-12 24 views
16

Me gustaría implementar la lógica que carga el archivo al servidor FTP.Subir archivo al servidor FTP en el iPhone

Soy nuevo en el desarrollo de iPhone, así que quiero descubrir el enfoque preferido. Después de examinar la API disponible para esta tarea, he logrado encontrar solo el código que usa CFNetwork (que parece que no se basa en Objective C).

También hay un sistema de carga de URL que usa NSURL, etc., que se basa en Objective C.

Entonces, mi pregunta: ¿es posible utilizar el sistema de carga de URL para implementar la carga de archivos en el servidor FTP?

Gracias.

Respuesta

32

utilizo un PHP Página para enviar un archivo a tener PHP y manejar la carga ....

Este código se utiliza para cargar una foto, pero puede ser adaptado para trabajar con cualquier archivo.

Código

PHP:

<?php 
$uploaddir = 'photos/'; 
$file = basename($_FILES['userfile']['name']); 
$uploadfile = $uploaddir . $file; 

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { 
    echo "OK"; 
} else { 
    echo "ERROR"; 
} 

?> 

Código iPhone:

- (BOOL)uploadImage:(NSData *)imageData filename:(NSString *)filename{ 


    NSString *urlString = @"http://www.yourdomainName.com/yourPHPPage.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 stringWithString:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@\"\r\n",filename]] 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 setHTTPBody:body]; 

    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
    NSString *returnString = [[[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding] autorelease]; 

    return ([returnString isEqualToString:@"OK"]); 
} 

llamada de método:

[self uploadImage:UIImageJPEGRepresentation(imageView.image, 1.0) filename:imageName]; 
+0

que he estado tratando de poner en práctica su código, pero el proceso siempre se devuelve un error . No entiendo completamente el bloque de código, por lo que simplemente puede ser que la forma en que se implementan los datos no sea apropiada para el NSData que intento enviar al archivo php. Lo que tengo es un objeto NSData que contiene los resultados de un NSKeyedArchiver de un NSMutableArray que contiene una matriz de objetos personalizados (en mi caso registros de bases de datos). ¿Sería capaz de señalarme un buen recurso para comprender el bloque de código y/o ¿Ofrecer sugerencias sobre cómo refinar este código para mi propósito? –

+0

Corrección: hubo un error tipográfico. El código devuelve OK, pero el archivo no se guarda en el directorio especificado. –

+0

Problema resuelto. Por favor, ignore la solicitud anterior. ¡Gracias! –

Cuestiones relacionadas