2013-08-26 105 views
0

我正在開發一個使用.NET Web服務的iOS應用程序。在其中一個Web服務中,我必須發送圖像HttpPostedFileBase在一個名爲「文件」的參數中,該參數將返回圖像URL和狀態參數作爲響應。其實我不確定什麼是HttpPostedFileBase。但我試圖將它作爲字節發送。我從WS獲取圖像URL爲空。我想WS電話工作正常,但問題是我發送圖像的方式。我正在使用下面的代碼將圖像數據附加到HTTP正文。發送圖像到.NET Web服務

NSData *imageData = UIImageJPEGRepresentation(image, 1); 
[postData appendData:[[NSString stringWithFormat:@"--%@\r--\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[postData appendData:[@"Content-Disposition: form-data; name=\"file\"; filename=\"file.jpeg\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
[postData appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
[postData appendData:imageData]; 
[request addValue:@"application/octet-stream" forHTTPHeaderField:@"Content-Type"]; 
[request addValue:[NSString stringWithFormat:@"%i", [postData length]] forHTTPHeaderField:@"Content-Length"]; 
[postData appendData:[[NSString stringWithFormat:@"--%@\r--\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

請讓我知道我該如何得到這個工作。讓我知道你是否需要更多的細節。

謝謝。

+0

您正在將沒有內容頭部分的內容發送到服務器,這就是爲什麼它不起作用。改變這一行「'mutablePostData = [NSMutableData dataWithData:imageData];'」爲「'[mutablePostData appendData:imageData];'」。而且,我也沒有看到任何內容邊界和端點? –

+0

@FahriAzimov,對不起。我的錯。請檢查現在編輯的代碼。謝謝。 – EmptyStack

+0

快速搜索SO給出了這個結果:http://stackoverflow.com/questions/8564833/ios-upload-image-and-text-using-http-post 祝你好運! –

回答

0

對不起球員。問題出在HTTP標頭中。上面的@FahriAzimov發佈的鏈接(ios Upload Image and Text using HTTP POST)幫助了我。我的不好,實際上我很困惑,.NET web服務將會有不同的格式。

我不得不像我們爲普通Web服務一樣發送圖像。工作代碼如下:

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

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

非常感謝大家的幫助。

-1

使用ASIHTTPRequest libraray,它非常好,你可以將圖像作爲附件插入到.NET服務器.... http://allseeing-i.com/ASIHTTPRequest/How-to-use

here is sample code 

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 

// Upload a file on disk 
[request setFile:@"/Users/ben/Desktop/ben.jpg" withFileName:@"myphoto.jpg" andContentType:@"image/jpeg" 
forKey:@"photo"]; 

// Upload an NSData instance 
[request setData:imageData withFileName:@"myphoto.jpg" andContentType:@"image/jpeg" forKey:@"photo"]; 
+2

請停止使用ASIHTTP。開發人員已經移除了對它的支持,也不支持ARC。 –

+0

謝謝!在上面的鏈接頁面上的第一行說***「請注意,我不再在這個圖書館工作 - 你可能要考慮使用別的新項目。」***。你認爲它仍然可以安全使用嗎? – EmptyStack

+1

@EmptyStack:我在我的prjs中使用ASIHTTPRequest,並且它在Apple中生活,我不認爲有問題。 – Pradeep