Easy uploads for Rails application
This is still an early beta version and will change a lot until it reaches API stability. That said, it's already being used on production projects.
Make sure you have ImageMagick installed.
gem 'uploadbox', '0.2.0'
rails g uploadbox:image
rake db:migrate
//= require jquery
//= require jquery_ujs
//= require uploadbox
/*
*= require uploadbox
*/
Create a development bucket on Amazon S3
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>http://localhost:3000</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
development:
s3_bucket: your-bucket-name
s3_key: your-s3-key
s3_secret: your-s3-secret
class Post < ActiveRecord::Base
uploads_one :picture, thumb: [100, 100], regular: [600, 300], placeholder: 'default.png'
end
If placeholder
is set posts without uploads will render the placeholder.
Empty @post.picture.thumb
will render app/assets/images/thumb_default.png
<%= f.uploads_one :picture %>
You can pass a :preview
option, so that the field will have the dimensions specified in the model.
<%= f.uploads_one :picture, preview: :thumb %>
def post_params
params.require(:post).permit(:title, :body, :picture)
end
<%= img @post.picture.regular if @post.picture? %>
class User < ActiveRecord::Base
uploads_many :pictures, thumb: [100, 100], regular: [600, 600], placeholder: 'default.png'
end
<%= f.uploads_many :pictures %>
You can pass a :preview
option, so that the field will have the dimensions specified in the model.
<%= f.uploads_one :pictures, preview: :thumb %>
def post_params
params.require(:user).permit(..., pictures: [])
end
<% @user.pictures.each do |pic| %>
<%= img pic.regular %>
<% end %>
Go to config/initializers/uploadbox.rb
, find the line where background_processing
is being set and set it to false
.
Uploadbox.background_processing = false
You might come to a situation where you want to retroactively change a version or add a new one. You can use the update_#{upload_name}_versions!
method to recreate the versions from the base file.
For a post with a picture:
Post.update_picture_versions!
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>http://yourdomain.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
heroku config:add \
HEROKU_API_KEY=ab12acvc12 \
HEROKU_APP=your-app-name \
S3_KEY=AAAA123BBBB \
S3_SECRET=abc123ABcEffgee122 \
S3_BUCKET=uploads-production
production:
s3_key: <%= ENV["S3_KEY"] %>
s3_secret: <%= ENV["S3_SECRET"] %>
s3_bucket: <%= ENV["S3_BUCKET"] %>
heroku addons:add rediscloud
If are upgrading from 0.1.x you will need to create a migration to add a column named original_file
to the images
table
rails g migration add_original_file_to_images original_file:string
rake db:migrate