Rails利用carrierwave上传图片

1.添加gem

gem ‘carrierwave‘
gem ‘mini_magick‘ #不使用rmagick,占内存

2.bundle install

3.为users表添加一个avatar字段,也可以为其他名称,注意相应的代码修改

rails g migration add_avatar_to_users avatar:string
rake db:migrate

4.生成Avatar,跟你添加的字段相同

rails generate uploader Avatar #将会生成文件app/uploaders/avatar_uploader.rb

5.为user的model user.rb添加如下代码,使表之间关联

mount_uploader :avatar, AvatarUploader

6.接下来进行修改app/uploaders/avatar_uploader.rb,下面是一个例子

# encoding: utf-8

class AvatarUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick #使用minimagick处理压缩图片,确保安装magickimage这个东东,ubuntu可以sudo apt-get install magickimage

  # 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

  def default_url  #可以定义默认图片,如过用户没有上传图片,则可以使用默认的图片
    "avatar/#{version_name}.png"
  end

#图片的处理,有不同版本大小,网站可以在不同的地方调用不同的图片大小
 version :normal do
    process :resize_to_fill => [48, 48]
  end

  version :small do
    process :resize_to_fill => [16, 16]
  end

  version :large do
    process :resize_to_fill => [64, 64]
  end

  version :big do
    process :resize_to_fill => [120, 120]
  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

  # Override the filename of the uploaded files:
  # Avoid using model.id or version_name here, see uploader/store.rb for details.
  # def filename
  #   "something.jpg" if original_filename
  # end

end

7.如何在表单中上传

<%= form_for(@user) do |f| %>
  <div class="field">
    <%= f.file_field :avatar %>
    <%= f.hidden_field :avatar_cache %>
  </div>
...
<%end%>

8.如何显示图片

<%= image_tag(@user.avatar_url(:large)) if @user.avatar %>#这里的:large就是指定图片的版本为large 64x64大小

详细查看carrierwave的reademe

时间: 2024-09-27 07:54:45

Rails利用carrierwave上传图片的相关文章

使用CarrierWave上传图片时,多版本文件名的统一

第一次使用CarrierWavewe做上传,不能不说,虽然Rails已经把上传变得超简单了,而CarrierWave则是把上传变成了一种享受,特别是做图片上传,现在这年代,图片展示平台已经不仅仅是电脑了,各移动端也是必须要兼顾的,这导致了上传的图片,一般都需要有好几个版本大小,如果还纯手工的使用RMagick之类慢慢处理的话,实在是有点郁闷,而CarrierWave配上MiniMagick,一个version搞定一切,真的是感觉“倍儿爽”. 不过在使用过程中,也发现了几个小问题,最主要的就是,就

rails利用big_sitemap生成sitemap

# Gemfile gem 'big_sitemap' # lib/tasks/sitemap.rake require 'big_sitemap' namespace :custom do desc "Generate sitemap" task :sitemap => :environment do include Rails.application.routes.url_helpers sitemap_options = { document_root: Rails.roo

python利用mongodb上传图片数据 : GridFS 与 bson两种方式

利用mongodb保存图片通常有两种方法,一种是将图片数据转化为二进制作为字典的键值对进行保存,另一种是利用mongodb提供的GridFS进行保存,两者各有利弊.性能方面的优劣未曾测试,无法进行评价,此处仅对两种方式进行介绍,若有彻知者还望指教. 下面以如下数据作为示例进行介绍: 数据示例 dic = { "owner_name" : "samssmilin", "photo_id" : "602880671", "

rails手脚架(scaffold)功能

scaffold是一个快速开发rails应用的代码框架,可以使用一条命令实现CRUD操作. 1: 创建一个应用 rails new scaffoldapp cd scaffoldapp rails s 在浏览器中打开http://localhost:3000/ 2: 创建一个名为blog的Scaffold 使用rails的scaffold创建模版,在此基础上进行增加.删除.修改.查询(CRUD)操作. rails g scaffold blog title:string content:text

rails 文档在线预览方案

使用方案: 非pdf文档转换为pdf文档,利用新版浏览器特性or使用js模拟文档预览功能 一.非pdf转化问pdf文档技术方案 1.openoffic+jodconverter(有依赖关系) openoffic3 只支持Microsoft Word 97/2000/XP,openoffic4 要求glibc2版本为2.11,升级glibc2可能导致系统崩溃: 2. libreoffice + unoconv(python脚本) libreoffice3  只支持Microsoft Word 97

如果遇到php5.6 上传图片error代码为6 或者 报错“PHP Warning: File upload error - unable to create a temporary file in Unknown on line 0&quot;如何解决

问题:再利用webuploader上传图片的时候发现,报错,打印了$_FILES["file"]["error"] 发现是6,找不到临时文件夹: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 $_FILES['file']['error']有以下几种类型: 1.UPLOAD_ERR_OK 其值为 0,没有错误发生,文件上传成功.   2.UPLOAD_ERR_INI_SIZE 其值为 1,上传的文件

黑马程序员------网络编程

1.1 InetAddress InetAddress:构造方法私有,不能直接创建对象. InetAddress getByName(String host):在给定主机名的情况下确定主机的ip地址. InetAddress getLocalHost():返回本地主机. InetAddress[] getAllByName(String host) ip.getHostAddress(), ip.getHostName() 1 示例1: 2 import java.net.InetAddress

Telegram学习解析系列(二):这我怎么给后台传输数据?

写在前面: 在iOS开发的过程中,有很多时候我们都在和数据打交道,最基本的就是数据的下载和上传了,估计很多很多的小伙伴都在用AFNetworking与后台数据打交道,可有没有想过,哪天AFNetworking你不能用了或者不会用了怎么办?可能你心中疑惑了,这三方只要更新,存在怎么会不能用或者我怎么会不会用了,在没有看Telegram源码之前,我也是这么想的,看了Telegram源码就不会再这么想了,以后我会把自己看的Telegram源码部分的总结和经验一点点的整理分享出来,整理成这个Telegr

利用html5调用本地摄像头拍照上传图片[转]

利用html5调用本地摄像头拍照上传图片 html5概念啥的就不废话了,不知道的 百度, 谷歌一堆..今天学了学html5中的Canvas结合新增的<video>标签来获取本地摄像头,在html5之前,要在浏览器获取本地摄像头只有通过插件(ActiveX,但是这种只有IE支持)或者是flash来获取(或许你没学过flash那就很坑爹了),在之后微软的silvertlight中也可以获取,但这些都比较麻烦,在html5的世界里,要获取本地摄像头,只要配合js就可以轻松获取.. 目前支持html5