我需要POST請求。該請求有3個參數,'email_id','位置'和'image_data'。 'image_data'的值包含UIImage的NSData jpeg表示。該請求必須使用multipart/form-data的內容類型提交。我如何創建NSMutableRequest發佈此請求?我應該如何設置邊界?是整個數據包所需的邊界,還是僅僅是圖像部分的邊界?UIImage使用NSMutable請求上傳
1
A
回答
2
此鏈接:
http://iphone.zcentric.com/2008/08/29/post-a-uiimage-to-the-web/
應包含所有你需要的。你需要擴展PHP腳本來處理你的非圖像參數,但這是我用過的。 :)
編輯:注意到以前的鏈接被打破。新的作品
2
如果我是你,我會檢查出ASIHTTPRequest庫。這是一個Cocoa的HTTP客戶端庫,它讓那些通過iPhone應用程序進行大量網絡交互的人們的生活變得更加容易。
下面是我使用ASIFormDataRequest(ASIHTTPRequest的一個組件)從我的iPhone應用程序上傳圖像。客戶對這些圖像的術語是「標記」 - 他們將在當地用戶拍攝的當地圖片地圖上進行搜索。用戶被邀請「做你的標記」。你可以想象隨之而來的快樂。
Anyhoo,self.mark
是我的Mark類的一個實例,它封裝了我正在上傳的圖像和細節包的數據。我有一個數據管理器單身我在這個方法的第一行中使用,它包含當前的CLLocation,所以我可以獲取這張圖片的地理編碼信息。
注意我不關心編碼類型或多部分邊界。該庫處理所有這些。
-(void)completeUpload
{
CLLocation *currentLoc = [DataManager sharedDataManager].currentLocation;
self.mark.latitude = [NSNumber numberWithDouble:currentLoc.coordinate.latitude];
self.mark.longitude = [NSNumber numberWithDouble:currentLoc.coordinate.longitude];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:
[NSURL URLWithString:[NSString stringWithFormat:@"%@image_upload.php", WEBAPPURL]]];
[request setPostValue:self.mark.titleText forKey:@"title"];
[request setPostValue:self.mark.descriptionText forKey:@"description"];
[request setPostValue:self.mark.event.guid forKey:@"event"];
[request setPostValue:self.mark.latitude forKey:@"latitude"];
[request setPostValue:self.mark.longitude forKey:@"longitude"];
[request setPostValue:self.mark.project forKey:@"project"];
[request setPostValue:[[NSUserDefaults standardUserDefaults] valueForKey:@"userID"] forKey:@"user_id"];
request.timeOutSeconds = 120;
int i = 1;
for (NSString *tag in self.tags) {
[request setPostValue:tag forKey:[NSString stringWithFormat:@"tag-%d", i]];
i++;
}
NSData *imageData = UIImagePNGRepresentation(self.mark.image);
NSData *thumbData = UIImagePNGRepresentation(self.mark.thumbnail);
[request setData:imageData forKey:@"file"];
[request setData:thumbData forKey:@"thumb"];
self.progress.progress = 20.0;
[request setUploadProgressDelegate:self.progress];
request.showAccurateProgress = YES;
request.delegate = self;
[request startAsynchronous];
}
編輯:順便說一句,我發佈到PHP腳本後面是HTTP身份驗證。 ASI緩存這些憑據,並且我提前提供了這些憑據,因此我不必在此再提供它們。我注意到,因爲否則,這篇文章和相應的PHP腳本被寫入的方式,任何人都可以僞造其他人的用戶ID值,並在他們的用戶名下發布任何內容。當你構建這樣的應用程序時,你必須考慮網絡應用程序安全性,與網站沒有區別。它實際上是一個網站,只是通過非傳統的客戶端瀏覽。
2
NSData *imageData=UIImageJPEGRepresentation(imageview.image, 1.0); NSString *[email protected]"nike.jpg" NSString *urlString = @"http://xyz.com/file_upload/file1.php"; NSMutableURLRequest *request =[[[NSMutableURLRequest alloc] init] autorelease]; [request setURL:[NSURL URLWithString:urlString]]; [request setHTTPMethod:@"POST"]; NSString *boundary = [NSString stringWithString:@"-----------------99882746641449"]; NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; NSMutableData *body = [NSMutableData data]; NSMutableString * string = [[NSMutableString alloc] init]; [string appendFormat:@"\r\n\r\n--%@\r\n", boundary]; [string appendFormat:@"Content-Disposition: form-data; name=\"emailid\"\r\n\r\n"]; [string appendFormat:@"[email protected]"]; //value [body appendData:[string dataUsingEncoding:NSUTF8StringEncoding]]; // encrypt the entire body [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]]; [string release]; [request setHTTPBody:body]; NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
相關問題
- 1. 使用FBDialog上傳UIImage
- 2. Perl上傳文件使用HTTP ::請求
- 3. 使用curl請求php圖像上傳
- 4. 使用ajax請求上傳文件
- 5. ASIHTTP:上傳UIImage?
- 6. 使用PUT請求上傳多個文件上傳
- 7. 上傳GIF而不使用UIImage
- 8. 使用UIImageJPEGRepresentation上傳UIImage到服務器
- 9. 添加UIImage到動畫的NSMutable陣列
- 10. Archieve NSMutable數組包含的UIImage
- 11. 上傳進度 - 請求
- 12. 請求確認後上傳
- 13. Phonegap上傳請求爲空
- 14. python請求上傳文件
- 15. 流媒體上傳請求?
- 16. 如何使用Kendo上傳器上傳文件並使用Ajax請求?
- 17. 用wxHTTP上傳wxImage發佈請求
- 18. lipo請求上傳到應用商店
- 19. 如何使用file.upload和請求上傳文件slack使用
- 20. 如何使用AWSS3 TransferManager上傳請求上傳圖像目標c?
- 21. 使用ETW捕獲傳入的HTTP請求和傳出的HTTP請求
- 22. 使用node.js流式傳入請求
- 23. 使用XmlHttpRequest傳遞請求值
- 24. 使用prepareForSegue傳遞一個UIWebView請求
- 25. 傳遞參數使用HTTP請求
- 26. 上傳的UIImage base64編碼
- 27. 將UIImage上傳到Parse
- 28. cherrypy文件上傳結合請求發佈請求
- 29. 誘騙ASP.NET以爲請求AJAX請求的jQuery文件上傳
- 30. Express Multer文件上傳請求身份和請求文件undefined
感謝您的快速回復。但我不能在我的項目中使用像ASIHttpRequest這樣的第三部分庫。 – Aravind 2010-09-02 08:30:02
這是爲什麼?這是一個學校任務嗎?真正的開發者重用代碼 – 2010-09-02 17:07:46