2012-07-10 40 views
23

Tôi đã làm việc để tải lên UIImage lên máy chủ web. Vấn đề là, hình ảnh không bao giờ xuất hiện trên Máy chủ. Một POST bình thường từ một tệp HTML hoạt động. Tôi nghĩ rằng đó là một vấn đề trong mã mục tiêu-c của tôi.Tải hình ảnh từ iOS lên PHP

Đây là mã Objective-C của tôi:

NSData *imageData = UIImagePNGRepresentation(delegate.dataBean.image); 
NSString *urlString = [NSString stringWithFormat:@"%@test.php", delegate.dataBean.hosterURL]; 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[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:@"rn--%@rn",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"uploadedfile\"; filename=\"test.png\"rn"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithString:@"Content-Type: application/octet-streamrnrn"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[NSData dataWithData:imageData]]; 
[body appendData:[[NSString stringWithFormat:@"rn--%@--rn",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[request setHTTPBody:body]; 

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

NSLog([NSString stringWithFormat:@"Image Return String: %@", returnString]); 

Đây là mã PHP của tôi:

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

echo "file=".$file; //is empty, but shouldn't 

if (move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $uploadfile)) { 
    echo $file; 
} 
else { 
    echo "error"; 
} 
?> 
+0

print_r ($ _ FILES) những gì hiện rằng chương –

+0

nó cho thấy một mảng trống: Mảng ( ) –

+1

$ _FILES cần được xác định theo mặc định. Nhưng nếu có tải lên, nó không được để trống. –

Trả lời

24

Bây giờ tôi đã giải quyết nó bằng bản thân mình =)

Tôi quên backslashes trong cơ thể.

Đây là cơ quan phải:

NSMutableData *body = [NSMutableData data]; 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"uploadedfile\"; filename=\"test.png\"\r\n"] 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]; 
Các vấn đề liên quan