2010-09-07 3 views
0

Я недавно начал переносить небольшое приложение на Facebook в качестве учебного опыта. Я хорошо знаком с Silverlight и .NET в целом, но пока ничего не сделал на facebook. Поскольку все доступные SDK и API-интерфейсы кажутся неработоспособными или я не смог их правильно использовать, я решил напрямую обратиться к графическому APIу Facebook и до сих пор был прост (я могу войти в систему, получить разрешения, получить профиль, альбомы и фотографии и сообщение в фид пользователей). Теперь я хочу загрузить фотографию, и именно здесь я действительно нажимаю на стену. Я использую что-то вроде этого, чтобы получить возможность отправлять фид:Загрузить фото на Facebook от Silverlight

 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. это не так, как «многочастному/form-данных» разместить работы. 2. Я знаю, по крайней мере, три библиотеки Silverlight, которые поддерживают загрузку фотографий в Facebook. Вы уверены, что хотите реализовать свои собственные? – Denis

+0

Нет, я не уверен, но у меня уже есть все остальное на месте, и это будет какое-то усилие, чтобы переместить его. Но в любом случае, вы бы указали мне на некоторые из этих библиотек, возможно, я что-то пропустил. А также, как работают «multipart/form-data»? –

+0

Несколько указателей http://www.ietf.org/rfc/rfc1867.txt, http://www.faqs.org/rfcs/rfc2388.html, http://www.vivtek.com/rfc1867.html – Denis

ответ

0

Попробуйте мой .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); 
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

Да , это была действительно опечатка, но ее исправление не решило проблему. –

Смежные вопросы