2009-08-12 11 views
16

Je voudrais mettre en œuvre une logique qui télécharge le fichier sur le serveur FTP.Télécharger le fichier sur le serveur FTP sur l'iPhone

Je suis nouveau dans le développement de l'iPhone, alors je veux comprendre l'approche préférée. Après avoir parcouru l'API disponible pour cette tâche, j'ai réussi à trouver seulement du code qui utilise CFNetwork (qui ne semble pas basé sur Objective C).

Il existe également un système de chargement d'URL qui utilise NSURL etc, basés sur Objective C. Donc, ma question: est-il possible d'utiliser le système de chargement d'URL pour implémenter le téléchargement de fichiers sur un serveur FTP?

Merci.

Répondre

32

J'utiliser une page PHP pour poster un fichier et que PHP gérer le téléchargement ....

Ce code est utilisé pour télécharger une photo, mais il peut être adapté pour fonctionner avec tous les fichiers.

Code 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"; 
} 

?> 

iPhone code:

- (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"]); 
} 

Méthode d'appel:

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

Je suis tenté de mettre en œuvre votre code, mais le processus renvoie toujours une erreur . Je ne comprends pas complètement le bloc de code, il se peut donc simplement que la façon dont les données sont implémentées n'est pas appropriée pour le NSData que je tente d'envoyer au fichier php. Ce que j'ai est un objet NSData qui contient les résultats d'un NSKeyedArchiver d'un NSMutableArray contenant un tableau d'objets personnalisés (dans mon cas les enregistrements de base de données.) Seriez-vous capable de me désigner une bonne ressource pour comprendre le bloc de code et/ou offrir des suggestions sur la façon d'affiner ce code pour mon but? –

+0

Correction: il y avait une faute de frappe. Le code renvoie OK mais le fichier n'est pas enregistré dans le répertoire spécifié. –

+0

Problème résolu. Veuillez ne pas tenir compte de la demande précédente. Merci! –

Questions connexes