1. Add these lines to your gemfile and run ‘bundle install’
# for aws cloud storage gem 'fog' # photo resizing gem "mini_magick" # file upload solution gem 'carrierwave'
2. generate new carrierwave uploader using this command’rails generate uploader Avatar’
That will creates a file in ‘app/uploaders/avatar_uploader.rb’
3. Update the file with the following
# encoding: utf-8 class AvatarUploader < CarrierWave::Uploader::Base # Include RMagick or MiniMagick support: # include CarrierWave::RMagick include CarrierWave::MiniMagick # Choose what kind of storage to use for this uploader: #storage :file storage :fog # Override the directory where uploaded files will be stored. # This is a sensible default for uploaders that are meant to be mounted: def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end # Provide a default URL as a default if there hasn't been a file uploaded: def default_url # For Rails 3.1+ asset pipeline compatibility: # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) #{}"/images/fallback/" + [version_name, "default.png"].compact.join('_') 'default_avatar.png' #rails will look at 'app/assets/images/default_avatar.png' end # Process files as they are uploaded: # process :scale => [200, 300] # # def scale(width, height) # # do something # end # Create different versions of your uploaded files: version :large_avatar do # returns a 150x150 image process :resize_to_fill => [150, 150] end version :medium_avatar do # returns a 50x50 image process :resize_to_fill => [50, 50] end version :small_avatar do # returns a 35x35 image process :resize_to_fill => [35, 35] end # Add a white list of extensions which are allowed to be uploaded. # For images you might use something like this: def extension_white_list %w(jpg jpeg gif png) end end
4. Update your user.rb with the following, assuming you already have avatar column in database with datatype string
class User < ActiveRecord::Base . . # Avatar uploader using carrierwave mount_uploader :avatar, AvatarUploader end
5. Create a new file in 'config/initializer/s3.rb', and paste the following code
CarrierWave.configure do |config| config.fog_credentials = { :provider => 'AWS', :aws_access_key_id => ENV['S3_KEY'], :aws_secret_access_key => ENV['S3_SECRET'] # :region => ENV['S3_REGION'] # Change this for different AWS region. Default is 'us-east-1' } config.fog_directory = ENV['S3_BUCKET'] end
6. If you are on unix machine, add the following code in your ~/.bash_profile, and run source to reload it, otherwise hardcoded the value of your access id, key and bucket in step 5.
#aws s3 export S3_KEY="SecretKeyFromAWS" export S3_SECRET="SecRetKEy" export S3_BUCKET="bucketname"
7. Code for upload view, pay attention to ':multipart => true'
<%= form_for @user, :html => {:multipart => true} do |f| %> <%= f.file_field :avatar %> <% end %>
8. Code to display in view
original size <%= image_tag(@user.avatar)%> large size <%= image_tag(@user.avatar.large_avatar)%> medium size <%= image_tag(@user.avatar.medium_avatar)%> small size <%= image_tag(@user.avatar.small_avatar)%>
This tutorial was clear and helped me with an issue I’d been struggling with for weeks. Thaaank you :}
Normally every USA citizens have a chance to take home depot survey on https://homedepotsurvey.org/ after their shopping and can win $5000.
Are you looking for free gift cards by taking surveys? Tim Hortons gives you a chance to win an Iced Coffee with French vanilla for $1 to their customers who participated in the Telltims survey at the official survey page https://storeopinion-can.com/telltims/.