我正在尝试使用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命令可以工作而不是红宝石代码的任何想法?
答案 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')}
)
我会尝试验证
答案 2 :(得分:0)
肖恩已在答案中介绍了这一点,但我会明确地强调它。我们在使用https://upload.box.com网址时遇到了一些问题,这些网址已不再使用。我建议您尝试使用https://api.box.com/2.0网址,看看它是否会改变您的结果。
最糟糕的情况我尝试使用像wireshark这样的数据包分析器捕获我的数据包,并寻找两种情况之间的差异。