使用mini_magick和carrierwave进行图片上传
相关Gem:
https://github.com/jnicklas/carrierwave
https://github.com/probablycorey/mini_magick
参考实例:https://github.com/diaspora/diaspora/blob/master/app/uploaders/processed_image.rb
示例:用户头像
1. 在项目的Gemfile中添加:
gem 'carrierwave'
gem 'mini_magick'
然后bundle install
如果使用Apache+Passenger,则需要将环境变量传递给passenger
此处应该是查找mini_magick的库
SetEnv PATH /usr/bin:/usr/local/bin,
我们加在apache的项目配置文件中
如:
<VirtualHost *:80>
ServerName eva
DocumentRoot /Users/P.Luo/vhosts/eva/public
SetEnv RootEnv eva
RailsEnv development
RackEnv development
SetEnv PATH /usr/bin:/usr/local/bin
<Directory "/Users/P.Luo/vhosts/eva/public">
AllowOverride all
Options -MultiViews
Allow from all
</Directory>
</VirtualHost>
参考:http://groups.google.com/group/phusion-passenger/browse_thread/thread/c79eb458c69abd89?pli=1
2. $ rails generate model User nickname:string avatar:string
生成migration、数据表:
class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users do |t|
t.string :nickname
t.string :avatar
t.timestamps
end
end
def self.down
drop_table :users
end
end
$ rake db:migration
3. 生成uploader:
$ rails generate uploader Avatar
这样会生成文件:app/uploaders/avatar_uploader.rb
a. 修改头像文件存储位置:
def store_dir
“uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}”
end
b. 添加头像版本:
version :thumb do
process :resize_to_fill => [50, 50]
end
version :normal do
process :resize_to_fill => [180, 180]
end
version :original
其中process后面的参数可为:resize_to_fill, resize_to_fit, resize_to_limit,其中resize_to_fill如果图片过大是会将图片截取,resize_to_fit则不会截取,而是通过较长长或宽同比例压缩,resize_to_limit就没有研究了。
最后一个版本version
riginal看了一下生成的图片文件,原本就有原大小的文件,所以其实可以不用这个版本。
c. 修改文件名
一般上传的文件名需要修改,此处使用加密原文件名的方法。
def filename
if @filename
Digest::SHA1.hexdigest(original_filename) + File.extname(@filename)
end
end
此处开始使用的是:
Time.now.to_i.to_s + File.extname(@filename)
发现生成不同版本时会取不同的filename,所以无法使用时间戳或随机数。
4. 修改app/models/user.rb:
class User < ActiveRecord::Base
mount_uploader :avatar, AvatarUploader
end
5. 创建用户页面app/views/users/_form.html.erb:
<%= form_for(@user, :html => {:multipart => true }) do |f| %>
<div class="field">
<%= f.label :nickname %><br />
<%= f.text_field :nickname %>
</div>
<div class="field">
<%= f.label :avatar %><br />
<%= image_tag(@user.avatar_url(:thumb)) if @user.avatar? %>
<%= f.file_field :avatar %>
<%= f.hidden_field :avatar_cache %>
</div>
<div class="field">
<%= f.label :remove_avatar %><br />
<%= f.check_box :remove_avatar %>
Remove Avatar
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
此处的remove_avatar为单独的删除头像,切不可同时上传头像。
6. 在Controller中,不需做任何处理,只是普通的保存就OK。
一般情况下,我们是上传头像后,直接由后台删除原有的图片文件。自己写的更新是:
def update
@user = User.find params[:id]
if params[:user][:avatar] && @user. avatar
old_avatar = User.find(params[:id]).avatar # 重新取user备用
end
if @user.update_attributes(params[:user])
old_avatar.remove! if old_avatar
end
redirect_to admin_groups_path
end
这样两次取@user,如果有更新,当保存成功时删除原有图片文件,否则不做处理。
分享到:
相关推荐
Api-rails5_api_tutorial.zip,了解如何在michael hartl的rails 5教程上构建一个现代api立即在rails应用程序中构建一个api!(Rails 5版本),一个api可以被认为是多个软件设备之间通信的指导手册。例如,api可用于web...
Agile Web Development with Rails 1-14节_ppt(老师发的修正版)
4. **Paperclip** 和 **CarrierWave**:这两个Gem用于文件上传,支持图片处理和存储服务集成。 5. **Pundit**:轻量级的授权库,用于创建更细粒度的权限控制,相比CanCanCan更简单。 6. **Bootstrap-Sass** 和 **...
Rails is a web-application framework that includes everything needed to create database-backed web applications according to the Model-View-Controller (MVC) pattern.
使用 Rails 中的 Carrierwave 将图像上传到 S3。 克隆这个 repo,然后运行: bundle install rake db:migrate 之后,您需要从 AWS 获取密钥以上传到 S3。 将这些密钥存储在您的config/secrets.yml文件中。 这是...
该自述文件通常会记录启动和运行应用程序所需的所有步骤。 您可能要讲的内容: Ruby版本 系统依赖 组态 数据库创建 数据库初始化 如何运行测试套件 服务(作业队列,缓存服务器,搜索引擎等) 组态 EDITOR=vi ...
这本书详细介绍了使用Ruby on Rails框架进行敏捷Web开发的相关知识。 Ruby on Rails(简称Rails)是一种基于Ruby编程语言的开源Web应用框架,它遵循“Don't Repeat Yourself”(DRY)原则,强调简洁、高效的代码...
8. **Asset Pipeline**:Rails的静态资源管理机制,包括CSS、JS和图片的编译、压缩和版本控制。 9. **Heroku或Capistrano部署**:学会如何将Rails应用部署到生产环境,如Heroku云平台或使用Capistrano进行自动化...
Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zipRuby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zipRuby_on_...
rails-dev-box, 面向 Ruby on Rails 核心开发的虚拟机 用于 Ruby on Rails 核心开发的虚拟机简介注意:这个虚拟机不是为 Rails 应用程序开发而设计的,只是为。 这个项目自动设置开发环境,以便在 Ruby on Rails ...
《Rails101_by_rails4.0》是一本专注于Rails 4.0.0版本和Ruby 2.0.0版本的自学教程书籍,它定位于中文读者,旨在成为学习Rails框架的参考教材。Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它...
Rails设置界面 一个Rails Engine来管理您的应用程序设置。 包括验证。 与Rails 5兼容。它与 gem兼容。 预习: 实时示例: : 如何添加到Gemfile gem 'rails-settings-ui'然后加gem 'rails-settings-cached'要么gem '...
Rails 2相较于早期版本,在多个方面进行了改进和完善: - **性能优化:** 包括内存管理和查询执行等方面的改进,提高了应用程序的运行效率。 - **安全性增强:** 强化了安全机制,例如防止SQL注入和跨站脚本攻击等。...
通过深入研究这个样本应用,初学者可以了解Rails的全貌,学习如何组织代码、设置路由、处理表单和响应、以及如何利用Rails的强大功能进行高效开发。同时,这也是一个实践和理解MVC设计模式的好机会。
Api-api_on_rails.zip,学习使用rubyonrails5/6构建api的最佳实践学习使用rubyonrails5/6构建api的最佳实践。本书的目的不仅仅是教你如何用rails构建api。目的还在于教您如何用rails构建可伸缩和可维护的api,这意味...
"Rails-JS-Project_TrainingSessions" 是一个关于使用Ruby on Rails框架与JavaScript技术进行项目开发的训练课程。这个训练课程可能包含了一系列的教程、代码示例和练习,旨在帮助开发者提升在Rails环境下构建交互式...
##安装首先按照司仪的安装说明进行操作gem install polymer-rails-formrake polymer_rails_forms:install然后在您的 /app/assets/components/application.html 文件中添加*= require rails-forms/rails-form##...
将administrate-field-active_storage和mini_magick到您的Gemfile中(第6条): gem 'administrate-field-active_storage' gem "image_processing" 对于rails 5.x,请使用以下命令 gem 'administrate-f
Rails Docker示例该应用程序的Docker设置来自以下: :入门要开始运行: docker-compose build 然后运行: docker-compose up 要连接到正在运行的应用程序容器,请运行: docker exec -it restarone_app /bin/sh 可以...
《Inspinia Admin - v2.5 Rails Seed Project:打造高效后台管理的全面解析》 在Web开发领域,后台管理界面的设计与实现是一项至关重要的任务,它直接影响到开发者的工作效率和用户体验。Inspinia Admin是一款广受...