2009-08-12 23 views
16

Chciałbym wdrożyć logikę, która ładuje plik na serwer FTP.Prześlij plik na serwer FTP na iPhone'a

Jestem nowy w rozwoju iPhone'a, więc chcę znaleźć preferowane podejście. Po przejrzeniu dostępnego API dla tego zadania udało mi się znaleźć tylko kod, który używa CFNetwork (który nie przypomina C).

Istnieje również system ładowania URL, który używa NSURL itp., Które są oparte na Celu C.

Moje pytanie: czy możliwe jest użycie systemu ładowania adresu URL do zaimplementowania przesyłania plików na serwer FTP?

Dzięki.

Odpowiedz

32

używam PHP stronę, aby umieścić plik PHP i mają obsługiwać przesyłanie ....

Ten kod służy do załadować zdjęcie, ale może być przystosowany do pracy z dowolnego pliku.

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

?> 

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

Sposób połączenia:

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

byłem próbując wdrożyć swój kod, ale proces zawsze zwraca błąd . Nie w pełni rozumiem blok kodu, więc może po prostu sposób, w jaki wdrażane są dane, nie jest odpowiedni dla NSData, który próbuję wysłać do pliku php. To, co mam, to obiekt NSData, który zawiera wyniki NSKeyedArchiver obiektu NSMutableArray zawierającego tablicę niestandardowych obiektów (w moich rekordach bazy danych). Czy byłbyś w stanie wskazać mi dobry zasób, aby zrozumieć blok kodu i/lub oferuje sugestie, w jaki sposób udoskonalić ten kod do mojego celu? –

+0

Korekta: wystąpił jeden błąd literowy. Kod zwraca OK, ale plik nie zostanie zapisany w określonym katalogu. –

+0

Problem rozwiązany. Odrzuć wcześniejsze żądanie. Dzięki! –

Powiązane problemy