2012-08-05 90 views
4

在此先感謝您的任何幫助。我正在使用僅使用json有效內容的Web服務,並且此服務已設置爲提交照片。正確的方式嵌入json有效載荷base64與網絡

所以我想弄清楚在JSON有效載荷中嵌入圖像的正確方法。這是我的方法。

//convert image to nsdata 
NSData *originalPhoto = UIImageJPEGRepresentation(self.photo.image,.9); 
//convert the data to a base64 string using NSData+Base64 category extension (Matt Gallagher version) 

NSString *base64photoString = [originalPhoto base64EncodedString]; 

//set the string in a NSDictionary 
[info setValue:base64photoString forKey:@"data"]; 

//then pass it to AFNetworking using the httpClient 

一切似乎工作,我得到json有效載荷。注意:bas64字符串在帖子正文中結束。

是否有人知道如果一個URI需要嵌入到數據的前面 - 如下所示:「file」:「data:image/jpg; base64,[base64 string]」 - 我做過試試這個,但沒有得到任何愛Web服務,但我可能有語法錯誤。

但是,網絡服務並不喜歡它。

爲了驗證編碼,我將生成的字符串從nslog中剪下來,並將其粘貼到在線解碼器網站中,並重新創建原始圖像 - 因此看起來數據編碼正確。

在我可以與Web服務器管理員交談之前兩天,所以我只是在尋找驗證這是一種正確的方法,或者請指出任何缺陷。我無法將服務更改爲多部分編碼形式,我堅持使用這種方法。

再次感謝

+0

你確定圖像本身應該放入JSON嗎?任何合理工作的WS我知道只用於元數據,實際的數據是在POST主體。 – 2012-08-05 05:18:39

+0

感謝您的回覆。它確實作爲json領域之一進入身體。我已經更新了有關URI的問題。 – CocoaEv 2012-08-05 12:59:40

回答

3

得到這個想通了,我想我會把答案出來的情況下,任何人都有類似的問題。

方案 - 發佈JSON有效載荷並將照片嵌入爲base64string。

我在這裏發現了base64的分叉版本。在其中包含了Matt Gallagher在2009年發佈的最初作品中的另一種方法,名爲:base64EncodedStringWithSeparateLines:YES - 這樣做。

//use it like this: 
NSData *originalPhoto = UIImageJPEGRepresentation(self.photo.image,1); 
NSString *base64PhotoString = [originalPhoto base64EncodedStringWithSeparateLines:YES]; 

//stuff it in a dictionary like this: 
NSMutableDictionary *info = [NSMutableDictionary dictionary]; 
[info setValue:base64PhotoString forKey:@"sFileData"]; 

//send it using AFNetworking like this: 
[[ClientInterface sharedInstance] postPath:submitPhoto parameters:info success:^(AFHTTPRequestOperation *operation, id responseObject) { 

    NSLog(@"success!"); 

} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 

    NSLog(@"Error:%@",error); 

}];