2014-11-24 96 views
-1

我使用follwing代碼,因爲我是新的xcode請告訴我如何發送圖像的數據。數據完美地發佈到服務器。只需添加代碼,以便我可以發送圖像到服務器:上傳圖像問題在Xcode和ios

- (IBAction)senddatatophp:(id)sender { 

    NSLog(@"Working insert button"); 

    NSString *did = [[NSUserDefaults standardUserDefaults] objectForKey:@"deviceID"]; 
    NSString *deviceTokenStr = [[[[did description] 
            stringByReplacingOccurrencesOfString: @"<" withString: @""] 
           stringByReplacingOccurrencesOfString: @">" withString: @""] 
           stringByReplacingOccurrencesOfString: @" " withString: @""]; 

    //NSLog(@"%@", deviceTokenStr); 

    NSData *getimgdata1 = UIImageJPEGRepresentation(_frontimg.image, 1); 
    NSLog(@"%@", getimgdata1); 


    NSString *[email protected]"Admin"; 
    NSString *[email protected]"panel"; 

    NSString *tag  = @"watchlist"; 
    NSString *gcmid  = deviceTokenStr; 
    NSString *brand  = textbox1.text; 
    NSString *model  = textbox2.text; 
    NSString *year  = textbox3.text; 
    NSString *condition = textbox4.text; 
    NSString *box  = textbox5.text; 
    NSString *warranty = textbox6.text; 
    //NSString *front_img = _path1; 
    //NSString *back_img = _path2; 
    //NSString *side_img = _path3; 

    NSString *sendData = @"name="; 
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", name]]; 
    sendData = [sendData stringByAppendingString:@"&lastname="]; 
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", lastname]]; 



    sendData = [sendData stringByAppendingString:@"&tag="]; 
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", tag]]; 
    sendData = [sendData stringByAppendingString:@"&gcmid="]; 
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", gcmid]]; 
    sendData = [sendData stringByAppendingString:@"&brand="]; 
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", brand]]; 
    sendData = [sendData stringByAppendingString:@"&model="]; 
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", model]]; 
    sendData = [sendData stringByAppendingString:@"&condition="]; 
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", condition]]; 
    sendData = [sendData stringByAppendingString:@"&year="]; 
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", year]]; 
    sendData = [sendData stringByAppendingString:@"&box="]; 
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", box]]; 
    sendData = [sendData stringByAppendingString:@"&warranty="]; 
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", warranty]]; 
    /* 
    sendData = [sendData stringByAppendingString:@"&front_img="]; 
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", front_img]]; 
    sendData = [sendData stringByAppendingString:@"&back_img="]; 
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", back_img]]; 
    sendData = [sendData stringByAppendingString:@"&side_img="]; 
    sendData = [sendData stringByAppendingString:[NSString stringWithFormat:@"%@", side_img]]; 
    */ 


    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.onlinestoresolution.net/demo/buymywatch/buymywatch/index.php"]]; 

    [request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; 

    //Here you send your data 
    [request setHTTPBody:[sendData dataUsingEncoding:NSUTF8StringEncoding]]; 

    [request setHTTPMethod:@"POST"]; 
    NSError *error = nil; 
    NSURLResponse *response = nil; 
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
    NSString *stringReply = (NSString *)[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
    _SendWatchId = stringReply; 

    if (error) 
    { 
     NSLog(@"Error: %@", stringReply); 

    } 
    else 
    { 
     //The response is in data 
     NSLog(@"Success: %@", stringReply); 
    } 


} 
+0

你傳遞的NSData * getimgdata1?在你的請求中 – Sport 2014-11-24 11:35:04

+0

yesi已經通過了img字節碼 – 2014-11-24 11:38:52

回答

1

使用此發送圖像文件。一旦你把你的文本數據發佈到服務器上,寫下這些代碼。

UIImage *img=self.imgView.image; 
NSData *imageData = UIImagePNGRepresentation(img); 
NSString *urlString = [NSString stringWithFormat:@"%@upload.php",@"http://localhost:8888/ImageUploadiOS/"]; 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setURL:[NSURL URLWithString:urlString]]; 
[request setHTTPMethod:@"POST"]; 

NSString *boundary = @"---------------------------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 stringWithFormat:@"Content-Disposition: form-data; name=\"uploadedfile\"; filename=\"test%d.png\"\r\n",self.fileNum] dataUsingEncoding:NSUTF8StringEncoding]]; 

[body appendData:[@"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]; 

NSLog(@"Image Return String: %@", returnString); 
self.fileNum++; 
UIAlertView *alertUpload=[[UIAlertView alloc] initWithTitle:@"DemoApp" message:@"Image Uploaded On Server" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
[alertUpload show]; 

用於在服務器上打印圖像數據的php代碼如下。

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

不要忘記更改請求的網址。 發送多個圖片的代碼是一次處理muliple圖像

 //image1 
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"uploadedfile1\"; filename=\"testing1.png\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 

[body appendData:[@"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]]; 
//end here image1 



//image2 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"uploadedfile2\"; filename=\"testing2.png\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 

[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[NSData dataWithData:imageData2]]; 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
//end here image2 

PHP代碼是

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

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

if (move_uploaded_file($_FILES['uploadedfile1']['tmp_name'], $uploadfile)) 
{ 
    //echo $file; 
    //echo 'Hello ' . htmlspecialchars($_POST["name"]) . '!'; 
    echo 'file1 moved'; 
} 
else 
{ 
    echo "error"; 
} 



$file2 = basename($_FILES['uploadedfile2']['name']); 
$uploadfile = $uploaddir . $file2; 

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

if (move_uploaded_file($_FILES['uploadedfile2']['tmp_name'], $uploadfile)) 
{ 
    //echo $file; 
    //echo 'Hello ' . htmlspecialchars($_POST["name"]) . '!'; 
    echo 'file2 moved'; 
} 
else 
{ 
    echo "error"; 
} 

?>

+0

什麼是這裏的數據 – 2014-11-24 11:50:10

+0

服務器響應將被分配到數據中。而不是刪除方法接收響應數據。 – 2014-11-24 11:52:25

+0

它給我的錯誤「使用undeclaredidentifier'數據'」 – 2014-11-24 11:54:43

0

這不是說,這有什麼意義,但如果你想發送字符串數據和圖像數據都需要將數據附加在一起。要做到這一點,最容易使用NSData的可變版本:

NSData *input1; 
NSData *input2; 
NSMutableData *output; 

output = [[NSMutableData alloc] initWithData:input1]; 
[output appendData:input2]; 

然後input1是你的字符串數據和input2圖像數據(反之亦然),你的output是你體內使用什麼。

你可能想要看的第一件事是發送請求異步,因爲你正在處理大量的數據。

0
// add image data 
NSData *getimgdata1 = UIImageJPEGRepresentation(_frontimg.image, 1); 
if (getimgdata1) { 
    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"image.jpg\"\r\n", FileParamConstant] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithString:@"Content-Type: image/jpeg\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:getimgdata1]; 
    [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
} 

[body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

參閱本NSData and Uploading Images via POST in iOS