将文件上传到box api v2

我正在尝试使用他们的v2 api将文件上传到box.com。 我能够成功上传curl文件,但无法从我的rails应用程序上传文件。 我正在传递我的上传function正确的文件夹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 

这是我的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命令工作但不是ruby代码?

这适合我

 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')} ) 

我会尽力validation

  1. 您可以进行非上传API调用(即GET / folders / 0)
  2. 如果没有,请检查防火墙设置。

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

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

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

Interesting Posts