будет легче использовать paperclip для управления загрузкой. Используя это, вы создадите таблицу для сохранения записи, которая будет иметь динамическую ссылку на ваш загруженный файл на S3.
Рабочий процесс выглядит следующим образом:
- Вы загрузите PDF в вопрос к вашему приложению
- PAPERCLIP будет загружать его в S3 и сохраняет URL в базе данных
- вы предоставить ссылку на ваш сайт для URL S3 в PDF
- ИЛИ вы дайте им ссылку на вашу запись, и вы начать загрузку, как вы писали выше
Первая модель, которая будет содержать ссылку 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 непосредственно, однако, если вы хотите, чтобы скрыть URL, а также позволяет обновлять PDF без разрыва связи вы можете дать пользователям ссылку на pdf_record
а затем начать загрузку из контроллера:
# give your users this url, as defined in your routes.rb
pdf_record_url(@pdf_record)
Тогда в шоу действия контроллера 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, ссылка всегда будет работать.
Не могли бы вы снова объяснить проблему? Почему имя файла изменяется? Что вызывает изменение? Изменяется ли только имя или содержание? Это функция безопасности? –