0

我正在尝试使用他们的 v2 api 将文件上传到 box.com。我能够使用 curl 成功上传文件,但无法从我的 rails 应用程序上传文件。我正在向我的上传函数传递正确的文件夹 ID,而文件是由我的应用程序中的表单上传创建的临时文件对象。

这是成功的 curl 命令

 curl https://upload.box.com/api/2.0/files/data -H "Authorization: BoxAuth api_key=API_KEY&auth_token=TOKEN" -F contract=@test.png -F folder_id=387656851 -ssl3

这是我的红宝石代码

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 命令可以工作而不是 ruby​​ 代码?

4

3 回答 3

1

尽管迟到了,但这对于遇到此问题的人可能很有用。在其 API 的 2.0 版本中,有一个 gem ruby​​-box可与 Box 服务一起使用。

于 2013-05-28T13:11:53.683 回答
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 /folders/0)
  2. 如果没有,请检查您的防火墙设置。
于 2012-09-12T20:46:05.707 回答
0

肖恩已经在他的回答中提到了这一点,但我会明确地强调它。我们在使用https://upload.box.com URL 时遇到了一些问题,box 不再推荐该 URL。我建议尝试https://api.box.com/2.0 URL 并查看它是否会改变您的结果。

最坏的情况我会尝试使用像wireshark这样的数据包分析器来捕获我的数据包并寻找两种情况之间的差异。

于 2012-09-12T22:40:12.927 回答