2011-09-25 115 views
0

我有一個Facebook畫布應用程序,我想從我的服務器上傳一個文件到用戶的牆上。從服務器上傳照片到Facebook

Facebook表示,該形式應創建,這就是我所做的:

<form action="https://graph.facebook.com/me/photos?access_token=<%= @access_token %>" method="post" enctype="multipart/form-data"> 
     <input name="source" type="hidden" value="https://young-water-9853.herokuapp.com/images/1.jpg" /> 
     <input name="commit" type="submit" value="Upload photo" class="cupid-green" /> 
</form> 

這是我收到的錯誤:

{ 「錯誤」:{ 「消息」 : 「(#324)需要上傳文件」, 「類型」: 「OAuthException」 } }

我該如何使它工作?

解決方案:

這是我使用的圖片張貼在牆上的動作:

get '/post_photo' do 
    RestClient.post 'https://graph.facebook.com/me/photos', :source => open('http://i52.tinypic.com/313jaxd.jpg'), :access_token => ACCESS_TOKEN 
    redirect '/' 
end 

回答

3

源參數必須是一個文件對象,而不是URL。如果用戶從他們的計算機上載文件:

<form action="https://graph.facebook.com/me/photos?access_token=<%= @access_token %>" method="post" enctype="multipart/form-data"> 
     <input name="source" type="file" /> 
     <input name="commit" type="submit" value="Upload photo" class="cupid-green" /> 
</form> 

或者,如果你想用戶上傳的預定義圖像,你會採取服務器端的服務。 rest_client寶石看起來像這樣一個理想的解決方案:

require 'rest_client' 
RestClient.post 'https://graph.facebook.com/me/photos', :source => File.new('/path/to/your/file'), :access_token => YOUR_ACCESS_TOKEN 
+0

感謝您的答案!因爲我想用我自己的照片休息客戶端是解決方案。我設法從irb中獲得這個工作,但它不能從服務器上運行,因爲我不知道該寫什麼文件的路徑。可以說我想從公共文件夾發佈「images/1.jpg」。我應該寫什麼作爲這個文件的路徑? –

+0

如果您使用RoR並且圖像位於'public/images',那麼您可以使用Rails.root.join('public','images','my_image.jpg')' –

+0

感謝,但是我正在使用Sinatra。你我怎麼能在Sinatra做這個? –