を返す:SEND_DATAは、私は私のリソースコントローラで次のダウンロードアクションを持って破損したファイルに
def download
require 'open-uri'
if validate_token(safe_params[:x])
resource = Resource.find_by_token(safe_params[:x])
data = open(resource.file.url)
send_data(data, :disposition => 'attachment',:url_based_filename => true, type: data.meta['content-type'].to_s)
# send_file data, disposition: 'attachment'
# redirect_to resource.file.url
puts data.hash
puts data.meta['x-goog-hash']
else
redirect_to pages_error_path, notice: 'Does not match resource.'
end
end
アクションは、Googleのストレージに保存されたファイルをダウンロードする(carrierwave
を使用)し、ブラウザにそのファイルをストリーミングします。 send_dataに複数の異なる構成のパラメータを試してみましたが、send_fileも試しました。私が実際に解決策になったのは、PDFファイルがダウンロードされた場所ですが、破損しています。 (時にはそれが誤ってテキストドキュメントをダウンロードし、以下に示すように、むしろ期待ファイルの内容よりも、私は、ファイルのメモリオブジェクトを取得します。私が感じて同じことを除いて、PDFのダウンロードで発生している
#<File:0x007fcdda128ea0>
をPDFビューアは明らかにそのPDFをレンダリングできません。
データベースに保存されているURLが正しいファイルを指し、data
変数が正しく初期化されていることを確認しました。ブラウザ。
リダイレクションではなく、これを行う理由私はあなたには、いくつかの説明をしてください提供できます(したがって、サーバへの一時的なダウンロード)ユーザー
に追加するには、Googleのストレージ上のファイルの場所を公開したくないので、ファイルのURLにctingはありますか? – Cherniv