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

この問題を解決する2つの方法を見つけました(トランスクリプトはこの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
    );
于 2009-03-05T23:45:41.270 に答える