¶ ↑
AttachedAttached is a Ruby on Rails file attachment tool that lets users upload to the cloud. The gem supports AWS, Google and Rackspace for storage networks by default. It is influenced (and copied) from Paperclip and makes heavy use of the incredibly awesome Fog library.
¶ ↑
RequirementsThe gem is tested with:
-
Ruby on Rails 4.1.6
-
Ruby 2.1.6
-
Ruby 2.0.0
-
Ruby 1.9.3
-
JRuby
¶ ↑
Installationgem install attached
¶ ↑
Optionalbrew install imagemagick brew install lame
¶ ↑
ExamplesMigration:
rails g model video name:string encoding:attachment class CreateVideo < ActiveRecord::Migration def self.up create_table :videos do |t| t.string :name t.attachment :encoding t.timestamps end end def self.down drop_table :videos end end
Model:
class Video < ActiveRecord::Base has_attached :encoding, styles: { webm: { extension: '.webm' }, mp4: { extension: '.mp4' }, ogv: { extension: '.ogv' }, } after_save do remote.encode(self.encoding.url) end end
Form:
<%= form_for @video, html: { multipart: true } do |form| %> <%= form.file_field :encoding %> <% end %>
View:
<video> <source src="<%= @video.encoding.url(:webm)" /> <source src="<%= @video.encoding.url(:mp4) %>" /> <source src="<%= @video.encoding.url(:ogg) %>" /> </video>
¶ ↑
Advanced¶ ↑
Validations# app/models/person.rb validates_attached_presence :file validates_attached_size :file, in: 2.kilobytes..2.megabytes validates_attached_extension :file, in: %w(jpe jpg jpeg png)
¶ ↑
Storage# app/models/user.rb has_attached :file, medium: :aws, credentials: "#{Rails.root}/config/aws.yml" # app/models/user.rb has_attached :file, medium: :google, credentials: "#{Rails.root}/config/google.yml" # app/models/user.rb has_attached :file, medium: :rackspace, credentials: "#{Rails.root}/config/rackspace.yml" # config/initializers/attached.rb Attached::Attachment.options[:medium] = :aws Attached::Attachment.options[:credentials] = "#{Rails.root}/config/aws.yml" # config/initializers/attached.rb Attached::Attachment.options[:medium] = :google Attached::Attachment.options[:credentials] = "#{Rails.root}/config/google.yml" # config/initializers/attached.rb Attached::Attachment.options[:medium] = :rackspace Attached::Attachment.options[:credentials] = "#{Rails.root}/config/rackspace.yml"
¶ ↑
Processors# app/models/image.rb has_attached :file, processor: :image, styles: { small: { size: '200x200>', extension: '.jpg', quality: 90 }, large: { size: '400x400<', extension: '.jpg', quality: 90 }, default: { size: '300x300#', extension: '.jpg', quality: 90 }, } # app/models/image.rb has_attached :file, processor: :image, styles: { small: { operation: :decrease, width: 200, height: 200, extension: '.jpg', quality: 90 }, large: { operation: :increase, width: 400, height: 400, extension: '.jpg', quality: 90 }, default: { operation: :resize, width: 300, height: 300, extension: '.jpg', quality: 90 }, } # app/models/audio.rb has_attached :file, processor: :audio, styles: { full: { preset: '320kbps', extension: '.wav' }, large: { preset: '256kbps', extension: '.wav' }, small: { preset: '128kbps', extension: '.wav' }, } # app/models/audio.rb has_attached :file, processor: :audio, styles: { full: { preset: 'insane', extension: '.wav' }, large: { preset: 'extreme', extension: '.wav' }, small: { preset: 'medium', extension: '.wav' }, }
¶ ↑
Strategies# app/models/sample.rb has_attached :file, processor: ..., styles: { ... }, strategy: :delay has_attached :file, processor: ..., styles: { ... }, strategy: :cache
¶ ↑
Reprocessingrake attached:process[Image,file] rake attached:process[Audio,file]
¶ ↑
Aliases# app/initializer/attached.rb Attached::Attachment.options[:alias] = "https://storage.ksylvest.com/" # app/initializer/attached.rb Attached::Attachment.options[:aliases] = %w( https://a.storage.ksylvest.com/ https://b.storage.ksylvest.com/ https://c.storage.ksylvest.com/ https://d.storage.ksylvest.com/ )
¶ ↑
Metadata# app/initializers/attached.rb Attached::Attachment.options[:metadata] = { 'Cache-Control' => 'max-age=3153600' }
¶ ↑
Status<img src=“https://img.shields.io/gemnasium/ksylvest/attached.svg” /> <img src=“https://img.shields.io/travis/ksylvest/attached.svg” /> <img src=“https://img.shields.io/coveralls/ksylvest/attached.svg” /> <img src=“https://img.shields.io/codeclimate/github/ksylvest/attached.svg” />
¶ ↑
CopyrightCopyright © 2010 - 2014 Kevin Sylvestre. See LICENSE for details.