2012-02-06 3 views
2

私はWebアプリケーションとそれらにアクセスし、のDropbox APIの作業は、今carrierwave

などなど、それらを処理できるようにクラウドに画像を同期するDropboxのを使用するiPadアプリを持っているとアマゾンS3に画像をコピーしようとしています私が問題を抱えている部分は、ファイルをdropboxからcarrierwave経由でs3に取得しています。私は写真のモデルを持っており、私は新しい写真を作成し、アップロードしてイメージを正常に作成できます。 Dropboxにファイルを置くこともできます。しかし、私がdropboxからファイルを取り出してs3に置くと、ファイルの内容はテキストに過ぎません。

私は何か設定する必要があるいくつかの種類のMIMEタイプがありますか?

dropbox_sdkget_file_and_metadataの方法を使用しています。私はファイルオブジェクトを正常に返しますが、内容はすべてテキストです。これは、私はそれが存在することを確認することができますので、ハード私が方法がわからない部分がこの画像@db_image取ると言うと、新しいphotoを作成するときに、そのファイルを使用している

dbsession = DropboxSession.deserialize(session[:dropbox_session]) 
@client = DropboxClient.new(dbsession, ACCESS_TYPE) #raise an exception if session not authorized 
@info = @client.account_info # look up account information 
@photo = Photo.new(params[:photo]) 
@db_image metadata = @client.get_file_and_metadata('/IMG_1575.jpg') 

..画像ファイルを符号化する私ですそれをS3に保存します。

私はそれが「MIMEタイプ」の問題かもしれないと思っていますが、これはファイルextにのみ基づいています。

あなたが共有できる洞察力は、本当に私がこの障害を乗り越えるのに役立ちます。ありがとう!

+0

これは本当にあなたの質問に答えていませんが、get_file_and_metadataは2つのことを返します。そのメタデータではなく画像ファイルだけが必要な場合は、「@ db_image、metadata = @ client.get_file_and_metadata( '/ IMG_1575.jpg')」としたいと思います。 – Chris

+0

これも試しました。それは、同じ問題を解決するための別の方法です。私はデータを得ることができますが、それはすべてテキストです。しかし、返信をありがとう。私はそれを反映するために投稿を編集しました。 – afxjzs

答えて

1

これを実証しました。代わりにcarrierwave gemで使用されているdropbox-api gemの一部であるdirect_url.urlメソッドを使用しました。 direct_url.urlメソッドは、そのファイルへの安全な完全なURLパスを返します。このパスは、carrierwaveの値としてremote_urlとして使用できます。今

@client = Dropbox::API::Client.new(:token => 'derp', :secret => 'derp') 
@dropbox_files = @client.ls "images/#{@event.keyword}/#{photo_size}/" 

@dropbox_files.each do |f| 
    photo_exists = Photo.where(:dropbox_path => f.direct_url.url).count 
    if photo_exists == 0 
    @photo = Photo.create(:remote_filename_url => f.direct_url.url, 
          :dropbox_path => f.direct_url.url, 
          :event_id => @event.id) 
    end 
end 

それはかなり遅いと不格好思えるように、私はルビーでかなり新しいので、私は結果をステップ実行するためのより良い方法を掲載する予定です。