Хорошим примером для использования является загрузка файла непосредственно в Amazon s3, а затем добавление его в приложение с помощью Carrierwave из этого места. Если вы храните файл во временном контейнере / месте на s3, вы можете эффективно обработать и переместить carrierwave. После того, как он напрямую загружен в s3 и, если у вас есть доступ к корзине и адресу, по которому вы его загрузили, вы можете использовать такой код, чтобы Carrierwave поднял его, обработал и «переместил»:
def add_file_from_URL(bucket, object_address)
s3 = AWS::S3::new
bucket = s3.buckets[bucket]
object = bucket.objects[object_address]
object_url = object.url_for(:read, :expires => 60*60, :secure => true) #expires in 1 hour
self.remote_attachment_url = object_url.to_s
self.save
object.delete()
end
Этот код будет использоваться в вашей модели, в которой находится файл.
Я пропустил код для обработки (изменения размера) файла, поскольку вы легко сможете найти его в документах Carrierwave, если вы еще не выполнили эту часть.
Чтобы отслеживать метаданные для файла, я бы предложил использовать обратный вызов: before_save для хранения этой информации в полях рядом с файлом. У вас был бы такой метод:
private
def update_file_attributes
if file.present?
self.file_content_type = attachment.file.content_type
self.file_size = attachment.file.size
end
end
В этом примере я сохраняю фактический размер файла, но вместо этого вы можете настроить его для измерений. Это относится к модели, в которой вы сохраняете файл.