Como faço para fazer upload de uma foto para um contato usando a biblioteca cliente Google Contato .NET

StackOverflow https://stackoverflow.com/questions/599571

  •  11-09-2019
  •  | 
  •  

Pergunta

Assim, depois de vasculhar a Internet eu reunido o seguinte código para carregar uma foto para um Google Contato:

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
    );

O Serviço é utilizar a autenticação ClientLogin. Antes esse código é executado, tenho recuperado com êxito o contato.

Após esse código é executado, no entanto, eu recebo um GDataRequestException. A mensagem de erro retornada é: "Um problema interno temporário ocorreu. Tente novamente mais tarde". A mensagem de erro na InnerException contém o seguinte: "O servidor remoto retornou um erro:. (500) Internal Server Error"

Depois de ainda mais pesquisa, eu encontrei indícios de que os códigos de erro do serviço Google pode não ser tudo o que descritivo -. E pode simplesmente retornar erro 500. Embora eu não sei como isso é verdade

Então, talvez o problema é com o meu código? Ou melhor ainda, alguém tem código de exemplo para demonstrar como isso deve ser feito?

Obrigado,

Camel

Foi útil?

Solução

Eu descobri duas formas para resolver este problema (a transcrição está em este Google API de contatos pós ). Primeiro, você pode criar um fluxo que acessa o arquivo diretamente, assim:

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

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

Em segundo lugar, a razão pela qual o meu código original não foi porque eu tive que redefinir a posição dentro do MemoryStream. Isto é o que eu ganho por ser um tal de noob em fluxos. Uma vez concluída a função Image.Save, a posição é no final. Então, tudo que você tem a fazer é redefinir a posição de início:

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
    );
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top