Aufgrund einiger Anfragen habe ich schnell diesen vierten Teil des Facebook-Tutorials geschrieben in dem erklärt wird, wie man via C# oder Visual Basic ein Foto zu Facebook hochladen kann.
1. Die Vorarbeiten werden in Teil 1, Teil 2 und Teil 3 dieses Tutorials erklärt. Jetzt habe ich das Formular mit einem Feld für den Dateinamen und Pfad sowie einer Taste “Fotoupload” ergänzt (Wer es etwas komfortabler haben möchte und den Dateinamen nicht tippen möchte kann noch den “OpenFileDialog” bedienen, auf das ich hier verzichtet habe).
2. Statt WebClient.UploadData verwende ich nun UploadFile und poste dies an “https://graph.facebook.com/me/photos”. Statt “me” kann ich auch die Nummer eines meiner Alben angeben oder sogar den Namen eines meiner Freunde (falls die eine Upload zulassen).
3. Der Parameter “message” dient zu Bildbeschreibung. Zudem kann man noch Tags, Beschreibungen usw. angeben, Details siehe in der Doku von Facebook Developer.
4. Der komplette Code für das Click-Event auf die Taste “Fotouplaod” sieht dann folgendermaßen aus:
private void buttonUpload_Click(object sender, EventArgs e)
{
byte[] Nachricht = null;
byte[] Antwort = null;
string AccessToken = null;
string u = "";
AccessToken = txtAccessToken.Text;
if (string.IsNullOrEmpty(AccessToken))
{
MessageBox.Show("Bitte erst auf 'Login' klicken");
return;
}
//postet das Foto unter "Fotos" des ausgewählten Users:
string GraphURL = "https://graph.facebook.com/me/photos";
//WebClient anlegen
System.Net.WebClient myWebClient = new System.Net.WebClient();
//Except100 ausschalten, sonst gibt es u. U. Fehlermeldungen
System.Net.ServicePointManager.Expect100Continue = false;
u = "?message=" + txtStatusupdate.Text + "&access_token=" + AccessToken;
Nachricht = Encoding.UTF8.GetBytes(u);
try
{
Antwort = myWebClient.UploadFile(GraphURL+u, "POST", textBoxDateiname.Text);
//MessageBox.Show(System.Text.Encoding.ASCII.GetString(Antwort));
MessageBox.Show("Foto erfogreich hochgeladen!");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Alternative: FileUploadAsync
In einem Kommentar zum meinem letzten Tutorials wurde ich gefragt, ob dies mit “Async” nicht schöner wäre – natürlich! Ich wollte es nur nicht unnötig kompliziert machen. Aber wenn hier ein großes Foto hochgeladen wird wäre es natürlich besser, wenn die Anwendung solange nicht “einfriert” und stattdessen z. B. den Fortschritt anzeigt. Dafür erweitere ich das Formular um eine Taste “Fotoupload (async)” sowie ein Label, in dem der Fortschritt des Uploads angezeigt werden soll:
Der Code für einen “async”-Upload dazu sieht dann so aus:
private void buttonAsyncUpload_Click_1(object sender, EventArgs e)
{
byte[] Nachricht = null;
string AccessToken = null;
string u = "";
AccessToken = txtAccessToken.Text;
if (string.IsNullOrEmpty(AccessToken))
{
MessageBox.Show("Bitte erst auf 'Login' klicken");
return;
}
string GraphURL = "https://graph.facebook.com/me/photos";
//WebClient anlegen
System.Net.WebClient myWebClient = new System.Net.WebClient();
//Except100 ausschalten, sonst gibt es u. U. Fehlermeldungen
System.Net.ServicePointManager.Expect100Continue = false;
u = "?message=" + txtStatusupdate.Text + "&access_token=" + AccessToken;
Nachricht = Encoding.UTF8.GetBytes(u);
//hier werden die Callbacks festgelegt:
myWebClient.UploadProgressChanged +=
new UploadProgressChangedEventHandler(UploadProgessChange);
myWebClient.UploadFileCompleted +=
new UploadFileCompletedEventHandler(UploadFertig);
try
{
myWebClient.UploadFileAsync(new Uri(GraphURL + u),
"POST", textBoxDateiname.Text);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void UploadProgessChange(object sender,
UploadProgressChangedEventArgs e)
{
LabelUpload.Text = e.ProgressPercentage.ToString() + "%";
// Alternativen: e.UserState, e.BytesReceived, e.TotalBytesToReceive,...
}
private void UploadFertig(object sender, UploadFileCompletedEventArgs e)
{
MessageBox.Show("Upload fertig!");
//ggf. Rückgabewert auslesen:
//byte[] data = (byte[])e.Result;
//string textData = System.Text.Encoding.UTF8.GetString(data);
//MessageBox.Show("Result: " + textData);
}
Codebeispiele in Visual Basic folgen!





ja, das ist in der tat wesentlich einfacher.. wow. funktioniert auch super. und sogar mit fortschrittsanzeige! besten dank. der webclient ist schon eine feine erfindung
das sind eindeutig die besten und verständlichsten tutorials zu dem thema die ich überhaupt gesehen habe.
Alles gute und schöne Grüße
Thomas
vielen Dank für die lobenden Worte & viel Erfolg weiterhin!
Ja, da hat er Recht. Die Tutorials sind Gold wert. Vielen Dank.