2009-03-01 45 views
0

所以在網上淘我拼湊下面的代碼上傳的谷歌聯繫人的照片後:如何上傳使用谷歌聯繫.NET客戶端庫聯繫人的照片

System.Drawing.Bitmap Image = new Bitmap(@"C:\test.jpg"); 
System.IO.MemoryStream Memory = new MemoryStream(); 
Image.Save(Memory, System.Drawing.Imaging.ImageFormat.Jpeg); 

Service.Update 
    (
     Contact.PhotoEditUri, 
     Memory, 
     "image/jpeg", 
     null 
    ); 

的服務是使用ClientLogin身份驗證。在此代碼運行之前,我已成功檢索到該聯繫人。

然而,這段代碼運行後,我得到一個GDataRequestException。返回的錯誤消息是「發生了暫時的內部問題,請稍後再試」。 InnerException中的錯誤消息包含以下內容:「遠程服務器返回錯誤:(500)內部服務器錯誤。」

經過更多研究後,我發現暗示來自Google服務的錯誤代碼可能不全是描述性的 - 並且可能僅僅返回錯誤500.儘管我不知道這是多麼真實。

所以也許問題是與我的代碼?或者甚至更好,有沒有人有示例代碼來演示如何做到這一點?

感謝,

駱駝

回答

0

我發現了兩種方法來解決這個問題(成績單是this Google Contacts API post)。首先,你可以創建一個直接訪問文件流,像這樣:

System.IO.FileStream File = new FileStream(@"C:\test.jpg"); 

Service.Update 
    (
     Contact.PhotoEditUri, 
     File, 
     "image/jpeg", 
     null 
    ); 

二,爲什麼我的原始代碼的失敗是因爲我不得不重置MemoryStream的內部位置的原因。這就是我在流媒體上做這樣一個noob的結果。一旦Image.Save函數完成,位置就結束了。因此,您所要做的就是將位置重置爲開頭:

System.Drawing.Bitmap Image = new Bitmap(@"C:\test.jpg"); 
System.IO.MemoryStream Memory = new MemoryStream(); 
Image.Save(Memory, System.Drawing.Imaging.ImageFormat.Jpeg); 
Memory.Seek(0, SeekOrigin.Begin); 

Service.Update 
    (
     Contact.PhotoEditUri, 
     Memory, 
     "image/jpeg", 
     null 
    );