簡體   English   中英

允許用戶從我的S3 Bucket下載圖像

[英]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上傳到您的應用
  • paperclip將其上傳到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和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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM