0

を返す: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変数が正しく初期化されていることを確認しました。ブラウザ。

リダイレクションではなく、これを行う理由私はあなたには、いくつかの説明をしてください提供できます(したがって、サーバへの一時的なダウンロード)ユーザー

答えて

0
send_data data.read, disposition: 'attachment', stream: 'true', buffer_size: '4096' 

stream: true

+0

に追加するには、Googleのストレージ上のファイルの場所を公開したくないので、ファイルのURLにctingはありますか? – Cherniv

関連する問題