2009-08-12 14 views
16

Ich möchte Logik implementieren, die Datei auf FTP-Server hochlädt.Datei auf FTP-Server auf dem iPhone hochladen

Ich bin neu in iPhone-Entwicklung, so wollen bevorzugte Ansatz herausfinden. Nach dem Durchsuchen der verfügbaren API für diese Aufgabe habe ich nur Code gefunden, der CFNetwork verwendet (der nicht auf Objective C basiert).

Es gibt auch ein URL Loading System, das NSURL usw. verwendet, die auf Objective C basieren.

Also, meine Frage: Ist es möglich, URL Loading System zu verwenden, um Datei-Upload auf FTP-Server zu implementieren?

Danke.

Antwort

32

Ich benutze eine PHP-Seite eine Datei zu schreiben und habe PHP das Hochladen Griff ....

Dieser Code verwendet wird, ein Bild hochladen, aber es kann angepasst werden, um mit einem beliebigen Datei zu arbeiten.

PHP-Code:

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

Methodenaufruf:

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

Ich habe Ihren Code zu implementieren wurde versucht, aber der Prozess kehrt immer einen Fehler . Ich verstehe den Code-Block nicht vollständig, daher kann es einfach sein, dass die Art, wie die Daten implementiert werden, nicht für die NSData geeignet ist, die ich an die PHP-Datei senden möchte. Was ich habe, ist ein NSData-Objekt, das die Ergebnisse eines NSKeyedArchiver eines NSMutableArray enthält, das ein Array von benutzerdefinierten Objekten enthält (in meinem Fall Datenbankeinträge). Wären Sie in der Lage, mich auf eine gute Ressource zu verweisen, um den Codeblock und/oder zu verstehen Vorschläge zur Verfeinerung dieses Codes für meinen Zweck zu geben? –

+0

Korrektur: Es gab einen Tippfehler. Der Code gibt OK zurück, aber die Datei wird nicht in dem angegebenen Verzeichnis gespeichert. –

+0

Problem gelöst. Bitte ignorieren Sie frühere Anfrage. Vielen Dank! –