11

UploadsUploader とこれがマウントされている Resource モデルを備えた Rails 3 アプリがあります。最近、s3 ストレージの使用に切り替えましたが、send_to メソッドを使用してファイルをダウンロードできなくなりました。ユーザーを認証済みの s3 URL に転送するだけの redirect_to メソッドを使用して、ダウンロードを有効にできます。ファイルのダウンロードを認証する必要があり、URL をhttp://mydomainname.com/the_file_pathまたはhttp://mydomainname.com/controller_action_name/id_of_resourceにしたいので、send_to を使用する必要があると想定していますが、方法はありますかredirect_to メソッドを使用してそれを行うには?私の現在のコードは次のとおりです。Resources_controller.rb

def download
  resource = Resource.find(params[:id])
    if resource.shared_items.find_by_shared_with_id(current_user) or resource.user_id == current_user.id
        filename = resource.upload_identifier
        send_file "#{Rails.root}/my_bucket_name_here/uploads/#{filename}"
    else
        flash[:notice] = "You don't have permission to access this file."
        redirect_to resources_path
    end
end

Carrierwave.rb 初期化子:

CarrierWave.configure do |config|
  config.fog_credentials = {
    :provider               => 'AWS',       # required
    :aws_access_key_id      => 'xxxx',       # copied off the aws site
    :aws_secret_access_key  => 'xxxx',       # 
  }

  config.fog_directory  = 'my_bucket_name_here'                     # required
  config.fog_host       = 'https://localhost:3000'            # optional, defaults to nil
  config.fog_public     = false                                   # optional, defaults to true
  config.fog_attributes = {'Cache-Control'=>'max-age=315576000'}  # optional, defaults to {}
end

upload_uploader.rb

class UploadUploader < CarrierWave::Uploader::Base
  storage :fog

  def store_dir
    "uploads"
  end
end

これはすべてエラーをスローします:

ファイル /home/tom/Documents/ruby/rails/circlshare/My_bucket_name_here/uploads/Picture0024.jpg を読み込めません

私は、carrierwave、fog、send_to などについて調べてみましたが、私が試したすべてのことはまだ実りがありません。アップロードは正常に機能しており、s3 バケット内のファイルを確認できます。ファイルがサーバーを通過しないため、 re_direct を使用すると便利です。どんな助けでも感謝します。ありがとう。

4

1 に答える 1

6

S3 にアップロードしたいようですが、公開されていない URL があります。S3 からファイルをダウンロードして send_file を使用する代わりに、ユーザーを S3 認証済み URL にリダイレクトできます。この URL は有効期限が切れ、しばらくの間 (ユーザーがダウンロードするため) のみ有効です。

このスレッドをチェックしてください: http://groups.google.com/group/carrierwave/browse_thread/thread/2f727c77864ac923

すでに fog_public を false に設定しているため、呼び出し時に認証済み (つまり署名済み) の URL を取得しますか?resource.upload_url

于 2011-09-04T16:38:14.810 に答える