如何使用Google Contact .NET客户端库为联系人上传照片

时间:2009-03-01 09:53:21

标签: .net contacts gdata

因此,在搜索互联网之后,我拼凑了以下代码来上传Google联系人的照片:

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.虽然我不知道这是多么真实。

所以问题可能在于我的代码?或者甚至更好,有没有人有示例代码来演示如何做到这一点?

谢谢,

骆驼

1 个答案:

答案 0 :(得分:0)

我找到了解决此问题的两种方法(成绩单位于this Google Contacts API post)。首先,您可以创建直接访问文件的流,如下所示:

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

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

其次,我的原始代码失败的原因是因为我不得不重置MemoryStream中的位置。这就是我在流上做这样的菜鸟所得到的。 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
    );