У меня есть приложение для рельсов, которое сохраняет в AWS S3 файлы для загрузки, которые пользователь выбрал. Пользователи заполняют пару полей в форме, относящейся к файлу, который они собираются загрузить. Мне нужно использовать эту информацию для создания нового имени файла.Переименуйте файлы перед загрузкой на S3
Это модель:
class DocAttachment < ActiveRecord::Base
belongs_to :doc_attachment_type
belongs_to :language
has_attached_file :attachment
before_save :rename_file
#Attempted Paperclips callbacks but couldn't get values for the form
#after_attachment_post_process :rename_file
validates_attachment_presence :attachment
validates_attachment_content_type :attachment,
content_type: %w(application/pdf application/vnd.ms-excel application/vnd.openxmlformats-officedocument.spreadsheetml.sheet application/msword application/vnd.openxmlformats-officedocument.wordprocessingml.document text/plain),
size: { :in => 0..10.megabytes }
validates :doc_attachment_type_id, presence: true
validates :code, presence: true
validates :title, presence: true
validates :language_id, presence: true
def rename_file
extension = File.extname(attachment_file_name).gsub(/^\.+/, '')
filename = attachment_file_name.gsub(/\.#{extension}$/, '')
new_attachment_file_name = "#{self.code}-#{self.language.name}.#{extension}"
attachment.instance_write(:attachment_file_name, new_attachment_file_name)
end
end
Gemfile:
gem 'aws-sdk', '< 2.0'
gem 'paperclip'
Я пытался использовать скрепки до/после обратного вызова, но они не появляются, чтобы предоставить мне представленных данных полей формы. Мне нравится идея s3_direct_upload gem, но я не уверен, что она будет работать, потому что она, похоже, не находится в активной разработке
Любая помощь очень ценится.
Дольше я хотел бы разрешить пользователю делать несколько загрузок с помощью AJAX с каким-то индикатором выполнения.