2009-03-01 6 views
0

So nach dem Internet Scheuern ich den folgenden Code ein Foto für eine Google Kontakt zum Hochladen zusammengestückelt:Wie kann ich ein Foto für einen Kontakt Bibliothek mit dem Google Kontakt .NET-Client laden

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

Der Service ist Verwenden der ClientLogin-Authentifizierung. Bevor dieser Code ausgeführt wird, habe ich den Kontakt erfolgreich abgerufen.

Nachdem dieser Code ausgeführt wird, erhalte ich jedoch eine GDataRequestException. Die zurückgegebene Fehlermeldung lautet: "Ein temporäres internes Problem ist aufgetreten. Versuchen Sie es später erneut." Die Fehlermeldung in der InnerException enthält Folgendes: "Der Remoteserver hat einen Fehler zurückgegeben: (500) Interner Serverfehler."

Nach weiteren Recherchen fand ich Hinweise, dass die Fehlercodes aus dem Google-Dienst möglicherweise nicht so aussagekräftig sind - und kann einfach Fehler 500 zurückgeben. Obwohl ich nicht weiß, wie wahr das ist.

Also vielleicht ist das Problem mit meinem Code? Oder noch besser: Hat jemand einen Beispielcode, um zu demonstrieren, wie das gemacht werden sollte?

Danke,

Kamel

Antwort

0

fand ich zwei Auswege, dieses Problem zu lösen (das Transkript ist in this Google Contacts API post). Erstens können Sie einen Stream erstellen, die Datei direkt zugreift, etwa so:

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

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

Zweitens der Grund, warum meine ursprüngliche Code gescheitert war, weil ich die Position innerhalb des Memory zurückgesetzt hatte. Das ist, was ich bekomme, weil ich so ein Noob in Streams bin. Sobald die Image.Save-Funktion abgeschlossen ist, befindet sich die Position am Ende. Also, alles, was Sie tun müssen, ist die Position an den Anfang zurückzusetzen:

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