这将是更容易使用paperclip管理上传。使用此功能,您将创建一张表格来保存一条记录,该记录将在S3上对您上传的文件进行动态引用。
的工作流程是这样的:
- 您有问题的PDF上传到您的应用程序
- 回形针上传它S3并保存URL到数据库
- 您提供一个链接到你的用户对于PDF的S3 URL
- 或者你给他们链接到你的纪录,你开始下载你发布上述
首先将举行PDF文件的参考模型是这样的:
class PdfRecord < ActiveRecord::Base
has_attached_file :pdf, :storage => :s3,
:bucket => 'S3_BUCKET_NAME',
:s3_credentials => {
:access_key_id => 'AWS_ACCESS_KEY_ID',
:secret_access_key => 'AWS_SECRET_ACCESS_KEY'
}
end
创建形式为自己上传PDF:
# app/views/pdf_records/new
<%= form_for @pdf_record, multipart: true do |f| %>
<%= f.label :pdf %>
<%= f.file_field :pdf %>
<%= f.submit %>
<% end %>
使用这个表格,您可以上传PDF和回形针会将它保存到S3并在数据库中保存对它的引用。
给你的用户这样一个链接到您pdf_record
:
@pdf_record = PdfRecord.find(which ever one you want)
@pdf_record.pdf.url # => the S3 url
从而给用户带来的是URL将让他们下载的PDF直接然而,如果你要隐藏的网址,并允许您更新PDF不用断开链路可以给用户一个链接pdf_record
,然后你开始从你的控制器下载:在pdf_record控制器的表演动作
# give your users this url, as defined in your routes.rb
pdf_record_url(@pdf_record)
然后:
def show
pdf_record = PdfRecord.find(params[:id])
data = open(pdf_record.pdf.url)
send_data data.read, filename: pdf_record.pdf_file_name,
type: pdf_record.pdf_content_type,
disposition: 'attachment',
stream: 'true',
buffer_size: '4096'
end
现在,您可以随时更新该pdf_record
,因为您的用户有一个链接到记录,而不是实际的PDF文件链接将始终工作。
你能再次解释这个问题吗?为什么文件名改变?什么触发了变化?只是名称更改或内容?这是一个安全功能吗? –