0

因此,在搜索了互联网之后,我拼凑了以下代码来为 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。虽然我不知道这是多么真实。

所以也许问题出在我的代码上?或者更好的是,有人有示例代码来演示应该如何完成吗?

谢谢,

骆驼

4

1 回答 1

0

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

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
    );
于 2009-03-05T23:45:41.270 回答