2010-09-07 55 views
0

我最近開始將我的一個小應用程序移植到Facebook作爲學習體驗。我對Silverlight和.NET非常熟悉,但尚未在Facebook上做任何事情。由於所有可用的SDK和API似乎都不起作用,或者我無法正確使用它們,所以我決定直接訪問Facebook的Graph API,並且這很容易(我可以登錄,請求權限,獲取個人資料,相冊和照片併發布到用戶供稿)。現在我想上傳一張照片,這就是我真正打的牆。我使用類似的東西來發布飼料:從Silverlight上傳照片到Facebook

 WebClient client = new WebClient(); 
     client.UploadStringCompleted += new UploadStringCompletedEventHandler(client_UploadStringCompleted); 
     client.UploadStringAsync(new Uri(String.Format("https://graph.facebook.com/me/feed")), "POST", 
      String.Format("message={0}&link={1}&picture={2}&access_token={3}", "Test", "www.gong.bg", "http://gong.bg/uploads/teams/teams_logos/logo_small_1.png", this.Access_Token)); 

很簡單,但它工作正常,我不需要更多。

照片上傳我試圖用類似的代碼,但沒有成功,於是我決定嘗試用HttpWebRequest和我現在有以下幾點:

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(String.Format("https://graph.facebook.com/me/photos")); 
     request.ContentType = "multipart/form-data"; 
     request.Method = "POST"; 
     request.BeginGetRequestStream(ar => 
     { 
      using (StreamWriter writer = new StreamWriter((ar.AsyncState as HttpWebRequest).EndGetRequestStream(ar))) 
      { 
       writer.Write("{0}={1}&", "message", HttpUtility.UrlEncode("Test")); 
       writer.Write("{0}[email protected]{1}&", "source", HttpUtility.UrlEncode("3.png")); 
       writer.Write("{0}={1}&", "access_token", this.Access_Token); 
      } 
     }, request); 

這不是工作,我看不出哪裏有問題是。根據Facebook的文件,這應該上傳一張照片到應用程序的默認相冊(創建一個,如果不存在)

謝謝大家。

+0

1.這不是如何 「的multipart/form-data的」 後的作品。 2.我知道至少有三個不同的Silverlight庫支持照片上傳到Facebook。你確定要實施自己的? – Denis 2010-09-07 02:05:16

+0

不,我不確定,但我已經擁有了其他所有東西,並且需要一些努力來移動它。但是無論如何,你會把我指向這些圖書館中的一些,也許我錯過了一些東西。另外,「多部分/表單數據」如何工作? – 2010-09-07 07:17:44

+0

幾個指針http://www.ietf.org/rfc/rfc1867.txt,http://www.faqs.org/rfcs/rfc2388.html,http://www.vivtek.com/rfc1867.html – Denis 2010-09-07 22:41:33

回答

0

嘗試我的Facebook上的.Net SDK Codeplex。最新的源代碼支持silverlight。 http://facebooksdk.codeplex.com

你可以做你正在嘗試這樣的東西:

 byte[] photo = File.ReadAllBytes(photoPath); 
     FacebookApp app = new FacebookApp(); 
     dynamic parameters = new ExpandoObject(); 
     parameters.access_token = "access_token"; 
     parameters.caption = "Test Photo"; 
     parameters.method = "facebook.photos.upload"; 
     parameters.uid = ConfigurationManager.AppSettings["UserId"]; 
     var mediaObject = new FacebookMediaObject 
     { 
      FileName = "monkey.jpg", 
      ContentType = "image/jpeg", 
     }; 
     mediaObject.SetValue(photo); 
     parameters.source = mediaObject; 
     app.ApiAsync((ar, state) => { 
      var postId = (string)ar.Result; 
     }, null, parameters, HttpMethod.Post); 
0

看起來這可能是一個簡單的錯字。嘗試刪除最後一個符號,所以你得到這個:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(String.Format("https://graph.facebook.com/me/photos")); 
request.ContentType = "multipart/form-data"; 
request.Method = "POST"; 
request.BeginGetRequestStream(ar => 
{ 
    using (StreamWriter writer = new StreamWriter((ar.AsyncState as HttpWebRequest).EndGetRequestStream(ar))) 
    { 
     writer.Write("{0}={1}&", "message", HttpUtility.UrlEncode("Test")); 
     writer.Write("{0}[email protected]{1}&", "source", HttpUtility.UrlEncode("3.png")); 
     writer.Write("{0}={1}", "access_token", this.Access_Token); 
    } 
}, request); 
+0

是,這確實是一個錯字,但修復它並沒有解決問題。 – 2010-09-07 00:57:27