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

那么问题可能出在我的代码上吗?或者更好的是,有人有示例代码来演示如何完成此操作吗?

谢谢,

骆驼

有帮助吗?

解决方案

我找到了两种方法来解决这个问题(文字记录在 此 Google 通讯录 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
    );
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top