訪問者にPDFをダウンロードするオプションを提供したいと思います。私が試してみました:
<%= link_to "abc", "/data/abc.pdf"%>
<%= link_to "abc", "/data/abc.pdf", :format => 'pdf' %>
いくつかのバリエーションがありますが、機能していないようです。 No route matches [GET] "/data/abc.pdf"
Pdfファイルは、assetsフォルダーにあるdataというフォルダーにあります。任意の助けをいただければ幸いです。
レール4:
ルートで:
get "home/download_pdf"
コントローラー内(既にPDFを持っています):
def download_pdf
send_file(
"#{Rails.root}/public/your_file.pdf",
filename: "your_custom_file_name.pdf",
type: "application/pdf"
)
end
コントローラー内(pdfを生成する必要があります):
require "prawn"
class ClientsController < ApplicationController
def download_pdf
client = Client.find(params[:id])
send_data generate_pdf(client),
filename: "#{client.name}.pdf",
type: "application/pdf"
end
private
def generate_pdf(client)
Prawn::Document.new do
text client.name, align: :center
text "Address: #{client.address}"
text "Email: #{client.email}"
end.render
end
end
ビューで:
<%= link_to 'Download PDF', home_download_pdf_url %>
レール3
それを行う方法:
def download
send_data pdf,
:filename => "abc.pdf",
:type => "application/pdf"
end
あなたはこの代替手段に行くべきです
レール<3
パブリックフォルダ内のファイル
これがあなたへの答えかもしれません: ファイルのダウンロード方法Rails application
ファイルをパブリックフォルダーに配置する必要があります。これがトリックです。
ファイルが正しく配置されると機能するはずです。
ファイルをパブリックフォルダーに移動できない場合はお知らせください。
コントローラ経由でダウンロード
Downlaodアクションとlink_to
itを使用してコントローラーを作成します
def download
send_file '/assets/data/abc.pdf', :type=>"application/pdf", :x_sendfile=>true
end
Rails 4:
ルートで:
get "home/download_pdf"
コントローラー内(既にPDFを持っています):
def download_pdf
send_file(
"#{Rails.root}/public/your_file.pdf",
filename: "your_custom_file_name.pdf",
type: "application/pdf"
)
end
コントローラー内(pdfを生成する必要があります):
require "prawn"
class ClientsController < ApplicationController
def download_pdf
client = Client.find(params[:id])
send_data generate_pdf(client),
filename: "#{client.name}.pdf",
type: "application/pdf"
end
private
def generate_pdf(client)
Prawn::Document.new do
text client.name, align: :center
text "Address: #{client.address}"
text "Email: #{client.email}"
end.render
end
end
ビューで:
<%= link_to 'Download PDF', home_download_pdf_url %>
ファイルが静的である(変更されないことを意味する)場合は、パブリックフォルダーに配置します。
その後、次のようにダウンロードできます
<a href="file.pdf" download>PDF</a>
またはERBを使用
<%= link_to 'PDF', 'file.pdf', download: '' %>
ファイルにダウンロード用の別の名前を付けるには、その名前をダウンロードオプションに渡すだけです
<%= link_to 'PDF', 'file.pdf', download: 'data' %>
これにより、ファイルはdata.pdf
ではなくfile.pdf
としてダウンロードされます。
このようにコントローラーアクションを呼び出すことができます
<%= link_to "Download", download_file_path, class: "btn btn-sm btn-default", target: "_blank" %>
そしてあなたのコントローラーで
def download_file
redirect_to Paperclip_attachment.file.url
end
パブリックディレクトリから一部のファイルを自動ダウンロードする簡単な方法を見つけるのに苦労しています。最後に、このソリューションを思いつきます。例:iパブリックディレクトリ内のSVGフォルダーにファイルがあります。
Public/svg/Test1.xlsx
今私がアクセスしようとすると、それをロードし、ペーパークリップでパスを与えると問題が発生します。フルパスを試しても問題が発生するため、ダイナミックパスにすることができます。最初にホストのパスを取得して、簡単にリダイレクトできるようにします。 <%url = request.original_url.chomp(request.fullpath)%>
これで、以下のようなパブリックフォルダー内のファイルにアクセスでき、IDとダウンロードオプションを渡すことができます。ダウンロードオプションは、ダウンロードするファイルの名前を変更します。
<%= link_to 'Database File', "#{url}/svgs/Test1.xlsx", download: 'Data.xlsx',id: "Link_to_Downlaod" %>
これで、クリック可能なリンクは、上記のリンクをクリックしてファイルをダウンロードする準備ができました。次のスクリプトを使用して、ファイルを自動ダウンロードします。
<script type="text/javascript">
window.onload = document.getElementById('Link_to_Downlaod').click();
</script>
</div>
PDFまたはその他のファイルタイプの場合、ファイル拡張子を変更するだけで済みます。