upload file to box api v2

五迷三道 提交于 2020-02-07 08:24:07

问题


i am trying to upload a file to box.com with their v2 api. i am able to successfully upload a file with curl, but cannot upload a file from my rails application. i am passing my upload function the correct folder id and file is a tempfile object created by a form upload in my app.

here is the successful curl command

 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

and here is my ruby code

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

end

i get an html page back from box with this text It appears that your firewall may be blocking Box or you are encountering an error.

Please contact your IT administrator to configure your firewall to recognize all sub-domains of .box.com, .box.com and .boxcdn.net. The ports that should be opened for these domains are 80 and 443.

If that does not resolve the issue, then please submit a support ticket at https://www.box.com/help.

any ideas why the curl command would be working but not the ruby code?


回答1:


This works properly for me

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

I would try to verify that

  1. You can make non-upload API calls (i.e. GET /folders/0)
  2. If not, check your firewall settings.



回答2:


Despite from being late, this could be useful for people who came across this question. There is a gem ruby-box to use with Box service at the 2.0 version of their API.




回答3:


Sean already covered this in his answer but I'll highlight it explicitly. We had some issues using the https://upload.box.com URL which is no longer recommended by box. I'd recommend trying the https://api.box.com/2.0 URL and seeing if that it changes your results.

Worst case I'd try capturing my packets using a packet analyzer like wireshark and looking for differences between the two cases.



来源:https://stackoverflow.com/questions/12394894/upload-file-to-box-api-v2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!