Carrierwave + Fog(s3)。ユーザーにファイルをダウンロードさせる

私はs3に格納されているファイルのダウンロードリンクをユーザーに提供する必要があるプロジェクトに取り組んでいます。私は最初、

link_to "Download", @medium.file.url

しかし、これはブラウザ上で直接ファイルを開きます。 mp4ファイルをダウンロードしようとしたときに、chromeが自動的に再生を開始しました。私はそれが起こることを望んでいません。だから私はこのタスクのためにsend_fileを使用していますが、

def download
  @medium = Medium.find(params[:id])
  send_file @medium.file.url
end

私のローカルでは、ストレージをファイルに設定しました。これをテストしましたが、これは問題なく動作します。しかし、ステージングでは、ファイルはs3から提供され、私はいつも ActionController :: MissingFile を得ています。私のアプリは英雄でホストされています。私はsend_fileを使うのが良い選択か、これを行う良い方法があるかどうかを知りたい。

config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'

私はグーグルでは、私はファイルを送信するためのnginxヘッダー設定が生産用に有効になっている必要があることがわかった。 config/environments/production.rbに次の行を追加しました。まだ運がありません。私はこれについていくつかの助けが必要です。ありがとう。

0

1 答え

S3はファイルを再生したいからです

私はここでS3にアクセスすることはできませんが、私はS3コントロールパネルでPDFファイル(私の場合に示されていた)のアクションを変更することでこの問題を解決しました。

これを修正できれば、send_fileを完全に使用することを避けることができると思います。

Edit: I managed to access S3 now. Go to properties -> Metadata, and add the key

Content-Disposition: Attachment

その後、ファイルは常に表示されずにダウンロードされます。

0
追加された
コンテンツの配置:添付ファイルはどこに追加しますか?私は適切性 - >メタデータを見つけることができません。
追加された 著者 Cyrus,
これはファイルのプロパティです。私はここにアクセスする必要はありませんが、バケットやフォルダをクリックし、ファイルをクリックしてプロパティを押してください(私が覚えている限り、誰かがこれを確認するかもしれません)
追加された 著者 Allan Nørgaard,