2012-08-10 20 views
0

好日子, 我試圖上傳一組圖像到服務器,圖像被包裝到NSData中,但服務器只返回一個圖像,這是我的代碼:上傳圖像數組(包裹在NSData中)到iOS中的服務器

- (void)actionSave{ 

NSArray *imagesArray = [NSArray arrayWithObjects:[NSData dataWithData:UIImagePNGRepresentation(self.imageViewForImageOne.image)], 
         [NSData dataWithData:UIImagePNGRepresentation(self.imageViewForImageTwo.image)], 
         [NSData dataWithData:UIImagePNGRepresentation(self.imageViewForImageThree.image)], 
         [NSData dataWithData:UIImagePNGRepresentation(self.imageViewForImageFour.image)], nil]; 

NSData *images = [NSKeyedArchiver archivedDataWithRootObject:imagesArray]; 

NSMutableURLRequest *requestImg = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@&mid=%@", SEND_POST_TO_WALL, [self.currentFriend objectForKey:@"uid"]]] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0f]; 

[requestImg setHTTPMethod:@"POST"]; 

NSString *boundary = @"---------------------------14737809831466499882746641449"; 
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; 
[requestImg addValue:contentType forHTTPHeaderField:@"Content-Type"]; 

NSMutableData *postData = [NSMutableData dataWithCapacity:[images length] + 512]; 
[postData setData:images]; 

NSMutableData *body = [NSMutableData data]; 

//Photo 
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[@"Content-Disposition: form-data; name=\"image\"; filename=\"image.png\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:postData]; 
[body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

//Text 
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"text\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[self.textView.text dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 

[requestImg setHTTPBody:body]; 

NSURLConnection *connectionForImage = [NSURLConnection connectionWithRequest:requestImg delegate:self]; 

if (connectionForImage) { 
    self.infoData = [NSMutableData data]; 
} else { 
    NSLog(@"Connection failed"); 
} 

}

這是結果是服務器返回:

array(3) { 
    ["act"]=> 
    string(12) "comments.add" 
    ["module"]=> 
    string(7) "account" 
    ["mid"]=> 
    string(4) "7728" 
} 
POST: 

array(1) { 
    ["text"]=> 
    string(5) "Gjdgy" 
} 
FILES: 

array(1) { 
    ["image"]=> 
    array(5) { 
    ["name"]=> 
    string(9) "image.png" 
    ["type"]=> 
    string(10) "image/jpeg" 
    ["tmp_name"]=> 
    string(14) "/tmp/php9oudKt" 
    ["error"]=> 
    int(0) 
    ["size"]=> 
    int(463652) 
    } 
} 

什麼我做錯了???

在此先感謝!

+0

我沒有看到任何代碼來讀取服務器響應,但你說「服務器只返回一個圖像」。 – trojanfoe 2012-08-10 11:53:30

+0

是的,服務器返回一個圖像,但腳本可以處理兩個圖像,現在我想更新帖子。 – 2012-08-10 11:54:30

回答

3

您向我們展示了數據的POST,但沒有再次獲取該數據的GET,因此不確定您的意思是「僅返回一個圖像」。它的返回應該是與你上傳的完全相同的數據blob,這是歸檔。您可以通過記錄您發送的大小以及返回的大小來測試它 - 如果服務器將原始blob返回,它們應該是相同的(如果不是,那是web問題而不是ios問題)。

隨着你從網上獲得的blob,你需要NSKeyUnarchive它來獲得你的原始數據項的數組。解散是與騷亂相反的。