¿Cómo subo una foto de un contacto con la biblioteca cliente .NET Google Contacto

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

  •  11-09-2019
  •  | 
  •  

Pregunta

Así que después recorriendo la Internet monté el siguiente código para cargar una foto para un contacto de 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
    );

El servicio está utilizando la autenticación ClientLogin. Antes de que este código se ejecuta, he recuperado con éxito el contacto.

Después de ejecutar este código, sin embargo, aparece un GDataRequestException. El mensaje de error devuelto es: "Se ha producido un problema interno temporal. Inténtalo de nuevo más tarde". El mensaje de error en el InnerException contiene lo siguiente: "El servidor remoto devolvió un error:. (500) Error interno del servidor"

Tras aún más investigación, encontré indicios de que los códigos de error del servicio de Google pueden no ser tan descriptivo -. Y puede simplemente devolver el error 500. Aunque no sé cómo esto es cierto

Así que tal vez el problema es con mi código? O mejor aún, ¿Alguien tiene código de ejemplo para demostrar cómo esto se debe hacer?

Gracias,

Camel

¿Fue útil?

Solución

descubrí dos formas de resolver este problema (la transcripción se encuentra en este Google API de contactos de post ). En primer lugar, puede crear una corriente que tiene acceso al archivo directamente, así:

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

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

En segundo lugar, la razón por la que mi código original no era porque tenía que restablecer la posición dentro de la MemoryStream. Esto es lo que me pasa por ser un novato en tales corrientes. Una vez que la función Image.Save completa, la posición se encuentra al final. Por lo tanto, todo lo que tiene que hacer es restablecer la posición de comienzo:

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top