這將是更容易使用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文件鏈接將始終工作。
你能再次解釋這個問題嗎?爲什麼文件名改變?什麼觸發了變化?只是名稱更改或內容?這是一個安全功能嗎? –