2009-08-12 49 views
16

Tôi muốn triển khai logic tải tệp lên máy chủ FTP.Tải tệp lên máy chủ FTP trên iPhone

Tôi mới phát triển iPhone, vì vậy, muốn tìm ra cách tiếp cận ưa thích. Sau khi duyệt API có sẵn cho tác vụ này, tôi đã quản lý để tìm mã duy nhất sử dụng CFNetwork (trông giống như không dựa trên Objective C).

Ngoài ra còn có Hệ thống tải URL sử dụng NSURL v.v ... dựa trên C mục tiêu.

Vì vậy, câu hỏi của tôi: Có thể sử dụng Hệ thống tải URL để triển khai tải tệp lên máy chủ FTP không?

Cảm ơn.

Trả lời

32

tôi sử dụng một PHP trang để gửi một tập tin vào và có PHP xử lý các tải lên ....

Mã này được sử dụng để tải lên một bức ảnh, nhưng nó có thể được điều chỉnh để làm việc với bất kỳ tập tin.

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

Phương pháp Call:

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

Tôi đã cố gắng để thực hiện mã của bạn, nhưng quá trình này luôn trả về một ERROR . Tôi không hoàn toàn hiểu được khối mã, vì vậy nó có thể chỉ đơn giản là cách dữ liệu đang được triển khai không thích hợp cho NSData mà tôi đang cố gắng gửi đến tệp php. Những gì tôi có là một đối tượng NSData có chứa các kết quả của một NSKeyedArchiver của một NSMutableArray có chứa một mảng các đối tượng tùy chỉnh (trong hồ sơ cơ sở dữ liệu trường hợp của tôi.) Bạn có thể chỉ cho tôi một tài nguyên tốt để hiểu khối mã và/hoặc đưa ra đề xuất về cách tinh chỉnh mã này cho mục đích của tôi? –

+0

Sửa chữa: có một lỗi đánh máy. Mã trả về OK nhưng tệp không được lưu trong thư mục được chỉ định. –

+0

Sự cố được giải quyết. Vui lòng bỏ qua yêu cầu trước đó. Cảm ơn! –

Các vấn đề liên quan