2009-03-01 12 views
0

Alors après avoir écumé l'Internet, je Rassemblé le code ci-dessous pour télécharger une photo pour un contact Google:Comment puis-je télécharger une photo pour un contact en utilisant la bibliothèque client Contact Google .NET

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

Le service est en utilisant l'authentification ClientLogin. Avant que ce code s'exécute, j'ai réussi à récupérer le contact.

Après l'exécution de ce code, cependant, j'obtiens une exception GDataRequestException. Le message d'erreur renvoyé est "Un problème interne temporaire s'est produit. Réessayez plus tard". Le message d'erreur dans InnerException contient le message suivant, "Le serveur distant a renvoyé une erreur: (500) Erreur interne du serveur." Après d'autres recherches, j'ai trouvé des indices que les codes d'erreur du service Google ne sont peut-être pas si descriptifs - et peuvent simplement renvoyer l'erreur 500. Bien que je ne sache pas à quel point c'est vrai.

Alors peut-être que le problème est avec mon code? Ou encore mieux, quelqu'un a-t-il un code d'exemple pour montrer comment cela devrait être fait?

Merci,

Camel

Répondre

0

J'ai découvert deux façons de résoudre ce problème (la transcription est en this Google Contacts API post). Tout d'abord, vous pouvez créer un flux qui accède au fichier directement, comme ceci:

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

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

En second lieu, la raison pour laquelle mon code d'origine a échoué parce que je devais remettre la position à l'intérieur du MemoryStream. C'est ce que je reçois pour être un tel noob sur les cours d'eau. Une fois la fonction Image.Save terminée, la position est à la fin. Donc, tout ce que vous avez à faire est de réinitialiser la position au début:

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