簡體   English   中英

從Silverlight將照片上傳到Facebook

[英]Upload photo to Facebook from Silverlight

我最近開始將我的一個小應用程序移植到Facebook作為學習經驗。 總的來說,我對Silverlight和.NET相當熟悉,但在Facebook上還沒有做任何事情。 由於所有可用的SDK和API似乎都無法正常工作,或者我無法正確使用它們,因此我決定直接訪問Facebook的Graph API,到目前為止,一切都很容易(我可以登錄,要求權限,獲取個人資料,相冊和照片,然后發布到用戶供稿)。 現在我要上傳照片,這是我真正碰到的地方。 我用這樣的東西發布一個提要:

        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}=@{1}&", "source", HttpUtility.UrlEncode("3.png"));
                writer.Write("{0}={1}&", "access_token", this.Access_Token);
            }
        }, request);

這不起作用,我看不到問題出在哪里。 根據Facebook文檔,這應該將照片上傳到應用默認相冊(如果不存在,則創建一張)

謝謝大家

看起來可能是簡單的錯字。 嘗試刪除最后一個與號,以使您得到:

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}=@{1}&", "source", HttpUtility.UrlEncode("3.png"));
        writer.Write("{0}={1}", "access_token", this.Access_Token);
    }
}, request);

在Codeplex上嘗試我的Facebook .Net SDK。 最新資源支持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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM