将文件上传到box api v2

时间:2012-09-12 19:22:38

标签: ruby file-upload box-api httparty

我正在尝试使用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和.box.com的所有子域。 .boxcdn.net。应为这些域打开的端口为80和443.

如果仍无法解决问题,请通过https://www.box.com/help提交支持服务单。

为什么curl命令可以工作而不是红宝石代码的任何想法?

3 个答案:

答案 0 :(得分:1)

尽管迟到了,但这对于遇到这个问题的人来说可能很有用。 在他们的API的2.0版本中有一个gem ruby-box用于Box服务。

答案 1 :(得分: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. 如果没有,请检查防火墙设置。

答案 2 :(得分:0)

肖恩已在答案中介绍了这一点,但我会明确地强调它。我们在使用https://upload.box.com网址时遇到了一些问题,这些网址已不再使用。我建议您尝试使用https://api.box.com/2.0网址,看看它是否会改变您的结果。

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