2012-09-12 104 views
0

我正嘗試使用他們的v2 api將文件上傳到box.com。 我能夠用curl成功上傳文件,但無法從我的rails應用程序上傳文件。我通過我的上傳功能正確的文件夾ID和文件是由我的應用程序中的表單上傳創建的臨時文件對象。將文件上傳到box api v2

這裏是成功的curl命令

curl https://upload.box.com/api/2.0/files/data -H "Authorization: BoxAuth api_key=API_KEY&auth_token=TOKEN" -F [email protected] -F folder_id=387656851 -ssl3 

,這裏是我的Ruby代碼

class BoxApi 

require 'httmultiparty' 
include HTTMultiParty 
ssl_version :SSLv3 

def initialize 
    @key = API_KEY 
    @token = TOKEN 
end 

def upload_file(folder_id,file,filename,content_type) 
    File.open(file) do |open_file| 
     response = self.class.post('https://upload.box.com/2.0/files/data', :query => { 
      :file => open_file, 
      :folder_id => folder_id 
      }, :headers => {'Authorization' => "BoxAuth api_key=#{@key}&auth_token=#{@token}"}) 
     p response 
    end 

我得到一個HTML頁面返回從盒子本文 看來,您的防火牆可能會阻止Box或遇到錯誤。

請聯繫您的IT管理員,將防火牆配置爲識別.box.com,.box.com和.boxcdn.net的所有子域。應爲這些域打開的端口是80和443.

如果這樣無法解決問題,請通過https://www.box.com/help提交支持通知單。

任何想法爲什麼curl命令會工作,但不是紅寶石代碼?

回答

0

這正常工作對我來說

require 'httmultiparty' 

class SomeClient 
    include HTTMultiParty 
    base_uri 'https://api.box.com/2.0' 
end 

response = SomeClient.post('/files/data', 
    :headers => { 'authorization' => 'BoxAuth api_key={YOUR API KEY}&auth_token={YOUR TOKEN' }, 
    :body => { :folder_id  => '0', :somefile => File.new('large.jpeg')} 
) 

我會嘗試驗證

  1. 可以使非上傳API調用(即GET /文件夾/ 0)
  2. 如果不是,檢查你的防火牆設置。
+0

我可以做非上傳API調用,如創建文件夾。我試過你的代碼,它沒有工作。我有一個401未經授權的使用該基地的uri,以及我在使用基地uri之前收到的同樣的錯誤,我在https://uploads.box.com/2.0/上方 – Austin

0

肖恩已經在他的回答中介紹了這一點,但我會明確地強調它。我們在使用https://upload.box.com網址時出現了一些問題,該網址不再由框推薦。我建議您嘗試使用https://api.box.com/2.0網址並查看它是否會更改您的結果。

最壞的情況我試圖使用類似wireshark的數據包分析器捕獲我的數據包,並尋找兩種情況之間的差異。

1

儘管遲到了,但這對於遇到此問題的人可能會有用。 有一個gem ruby-box可用於2.0版API的Box服務。