0

v2apiを使用してbox.comにファイルをアップロードしようとしています。curlを使用してファイルを正常にアップロードできますが、Railsアプリケーションからファイルをアップロードできません。アップロード関数に正しいフォルダーIDを渡し、ファイルはアプリのフォームアップロードによって作成されたtempfileオブジェクトです。

これが成功した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ページがボックスから返されますファイアウォールがボックスをブロックしているか、エラーが発生しているようです。

IT管​​理者に連絡して、.box.com、.box.com、および.boxcdn.netのすべてのサブドメインを認識するようにファイアウォールを構成してください。これらのドメイン用に開く必要のあるポートは80と443です。それでも

問題が解決しない場合は、https://www.box.com/helpでサポートチケットを送信してください。

curlコマンドは機能するが、rubyコードは機能しない理由はありますか?

4

3 に答える 3

1

遅れているにもかかわらず、これはこの質問に出くわした人々にとって役立つかもしれません。APIの2.0バージョンでBoxサービスで使用するgemruby-boxがあります。

于 2013-05-28T13:11:53.683 に答える
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 / folder / 0)
  2. そうでない場合は、ファイアウォールの設定を確認してください。
于 2012-09-12T20:46:05.707 に答える
0

ショーンはすでにこれを彼の答えでカバーしていますが、私はそれを明確に強調します。ボックスで推奨されなくなったhttps://upload.box.comURLの使用で問題が発生しました。https://api.box.com/2.0 URLを試して、結果が変わるかどうかを確認することをお勧めします。

最悪の場合、wiresharkなどのパケットアナライザを使用してパケットをキャプチャし、2つのケースの違いを探してみます。

于 2012-09-12T22:40:12.927 に答える