16

現在、Amazon S3 と Paperclip を使用しています。これにより、ユーザーは作成中のイベントに関連付けられた画像をアップロードできます。私の最終的な目標は、他の人がこのイベントを表示できるため、画像をクリックして自分のコンピューターに保存するように促すことができるようにすることです。現在のところ、リンクをクリックすると、ブラウザ ウィンドウで画像が開きます。むしろ、代わりにダウンロードするように求めています。すべての画像はローカルではなく S3 にのみ保存されます。可能であれば、公開された s3 URL も非表示にするか、カモフラージュする必要があります

これが私の現在のセットアップです

索引.html

<%= link_to 'Download Creative', event.creative.url, class: "btn btn-info" %>

イベント.rb

has_attached_file :creative,
                :styles => { :thumb => "150x150", :custcreative => "250x75" },
                :path => ":attachment/:id/:style.:extension",
                :s3_domain_url => "******.s3.amazonaws.com",
                :storage => :s3,
                :s3_credentials => Rails.root.join("config/s3.yml"),
                :bucket => '*****',
                :s3_permissions => :public_read,
                :s3_protocol => "http",
                :convert_options => { :all => "-auto-orient" },
                :encode => 'utf8'

誰かが私を助けてくれることを願っています。

4

5 に答える 5

30

アプリへの余分な負荷を回避する (Heroku で dyno の時間を節約する) ために、次のようなことをしたいと思います: このメソッドをモデルに添付ファイルと共に追加します。

def download_url(style_name=:original)
  creative.s3_bucket.objects[creative.s3_object(style_name).key].url_for(:read,
      :secure => true,
      :expires => 24*3600,  # 24 hours
      :response_content_disposition => "attachment; filename='#{creative_file_name}'").to_s
end

そして、次のようにビュー/コントローラーで使用します。

<%= link_to 'Download Creative', event.download_url, class: "btn btn-info" %>
于 2013-05-07T18:32:14.630 に答える
17

これを機能させるために、コントローラーに新しいアクションを追加したので、あなたの場合は次のようになります。

#routes
resources :events do
  member { get :download }
end

#index
<%= link_to 'Download Creative', download_event_path(event), class: "btn btn-info" %>

#events_controller
def download
  data = open(event.creative_url)
  send_data data.read, :type => data.content_type, :x_sendfile => true
end

編集:ダウンロードコントローラーアクションの正しい解決策はここにあります(上記のコードを更新しました):リンクを強制してMP3を再生するのではなくダウンロードしますか?

于 2012-11-21T11:32:25.903 に答える
0

HTTP 応答ヘッダーで「 Content-Disposition」を「attachment 」に設定する必要があります。私は Rails 開発者ではないので、Google で検索するとたくさんの例が表示されますが、おそらく次のようになります。

    :content_disposition => "attachment"

また

     ...
    :disposition => "attachment"
于 2012-10-24T07:20:02.790 に答える