Question

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?

Was it helpful?

Solution

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.

OTHER TIPS

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.

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top