![](/img/trans.png)
[英]How can I take image from the amazon s3 bucket to my local system using rails?
[英]Allowing User to Download Image from my S3 Bucket
我正在嘗試構建一個允許用戶從我的s3存儲桶下載pdf文件的方法(目前它正在執行)
但是網址的某些部分可能會不時更改,例如/ timetables之后的id號,文件名(但始終是pdf)和文件名后的id號
這就是我到目前為止所擁有的
def download
path = "images/timetables/14/original.pdf?"
data = open("http://#{ENV['AWS_BUCKET']}.s3.amazonaws.com/#{path}/1392904333")
send_data data.read, filename: 'Timetable',
type: 'application/pdf',
disposition: 'attachment',
stream: 'true',
buffer_size: '4096'
end
有沒有辦法在運行中獲取此信息或我只能硬編碼? 理想情況下,我想盡可能多地將路徑存儲到變量中。
誰能告訴我如何正確地做到這一點。
謝謝
使用回形針管理上傳會更容易。 使用此方法,您將創建一個表來保存記錄,該記錄將在S3上對您上傳的文件進行動態引用。
工作流程如下:
首先,保存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和paperclip將其保存到S3並在數據庫中保留對它的引用。
為您的用戶提供指向您的pdf_record
的鏈接,如下所示:
@pdf_record = PdfRecord.find(which ever one you want)
@pdf_record.pdf.url # => the S3 url
給你的用戶這個url會讓他們直接下載pdf但是,如果你想隱藏URL並且還允許你在不破壞鏈接的情況下更新pdf,你可以給用戶一個指向pdf_record
的鏈接,然后你開始下載你的控制器:
# give your users this url, as defined in your routes.rb
pdf_record_url(@pdf_record)
然后在pdf_record控制器的show動作中:
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文件,因此該鏈接將始終有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.