rails应用使用carrierwave和mini_magick上传用户头像
1. 在Gemfile添加
gem 'carrierwave'
gem 'mini_magick'
执行 bundle install
2. 生成uploader
rails generate uploader UserPic
生成文件uploaders/user_pic_uploader.rb ,修改如下
# 修改文件存储位置
def store_dir
# "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
"user_head_pic"
end # 设置默认头像
def default_url(*args)
"/assets/user_head.png"
end # 修改文件名
def filename
if original_filename
@name ||= Digest::MD5.hexdigest(current_path)
"#{@name}#{file.basename}.#{file.extension}"
end
end
3. 给user表添加用户头像字段
添加migrate文件并执行 rails db:migrate
class AddHeadPicToUsers < ActiveRecord::Migration[5.1]
def change
add_column :users,:head_pic,:string,:comment=>'头像'
end
end
4. 修改app/models/user.rb
user.rb中添加UserPicUploader
class User < ActiveRecord::Base
mount_uploader :head_pic, UserPicUploader
end
5. 保存头像
cotroller中对应的action如下
def update_user_pic
image_info = params[:avatar]||""
if image_info.include? "data:image/png"
png = Base64.decode64(image_info['data:image/png;base64,'.length .. -1])# 将 Base64 编码的参数用 Base64 解码,得到数据的二进制表示,也就是图片本身的二进制数据
unless Dir.exists?("#{Rails.root}/public/user_head_pic")
FileUtils.mkdir_p("#{Rails.root}/public/user_head_pic")
end
file_name = "img_#{@current_user.user_no}.png"# 根据当前用户工号声明一个文件名
file_path = "#{Rails.root}/public/user_head_pic/#{file_name}" # 确定文件保存路径
File.open(file_path,'wb') do |item|# 根据文件路径创建新文件
item.write(png)# 将前面的二进制数据写到文件里
end
@current_user.head_pic = File.open(Rails.root+"public/user_head_pic/#{file_name}")
@current_user.save
flash[:notice] = "保存成功!"
else
flash[:notice] = "保存失败!"
end redirect_to :action=>:update_head
end
6. 显示头像
<img src="<%= @user.head_pic.url%>" />
rails应用使用carrierwave和mini_magick上传用户头像的更多相关文章
- 【NopCommerce 3.1】asp.net mvc 利用jQuery from.js上传用户头像
纯代码不解释. 在CusotmerControllers中添加上传方法 /// <summary> /// ajax上传用户头像 /// </summary> /// < ...
- rails中使用CarrierWave实现文件上传的功能
之前在用django写blog的时候头像上传和头像预览都是使用原生的js实现的,之前也有写了一篇blog.好了开始进入正题 rails中实现头像上传十分的方便,只要通过CarrierWave这个gem ...
- 手机端用来上传用户头像的代码canvas
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Vue+axios+Node+express实现文件上传(用户头像上传)
Vue 页面的代码 <label for='my_file' class="theme-color"> <mu-icon left value="bac ...
- 微信小程序--更换用户头像/上传用户头像/更新用户头像
changeAvatar:function (){ var that=this; wx.chooseImage({ count: 1, // 默认9 sizeType: ['original', 'c ...
- 升级IOS8游戏上传自定义头像功能失效的问题
为了支持arm64,之前已经折腾了很久,昨晚打包准备提交苹果审核时,测试那边的同事反馈说游戏上传自定义头像功能不可用了. 游戏上传自定义功能的简介:卡牌游戏最初是<比武招亲>中有一个充VI ...
- Android图片上传(头像裁切+原图原样)
下面简单铺一下代码: (一)头像裁切.上传服务器(代码) 这里上边的按钮是头像的点击事件,弹出底部的头像选择框,下边的按钮跳到下个页面,进行原图上传. ? 1 2 3 4 5 6 7 8 9 10 1 ...
- cocoon + carrierwave 多图片上传用法
gem 'cocoon' gem 'carrierwave' gem 'mini_magick' 1.图片上传carrierwave配置,github 自己手动添加的配置,没用命令生成 在app下新建 ...
- 文件上传之——用SWF插件实现文件异步上传和头像截取
之前写过几篇文件上传,那些都不错.今天小编带领大家体会一种新的上传方法,及使用Flash插件实现文件上传. 使用Flash的好处就是可以解决浏览器兼容性问题.之前我写的一个快捷复制功能也是利用的Fla ...
随机推荐
- 【转】PBOC3.0和PBOC2.0标准规范异同分析
2013年2月,中国人民银行发布了<中国金融集成电路(IC)卡规范(V3.0)>(以下简称PBOC3.0),PBOC3.0是在中国人民银行2005年颁布的<中国金融集成电路(IC)卡 ...
- FZEasyFile的使用
FZEasyFile的使用 https://github.com/jiecao-fm/FZEasyFile 操作沙盒文件很恶心,但用上FZEasyFile就变得简单了. 以前你需要这么做才行: NSF ...
- angular2 文件上传
ng2-file-upload文件上传 1.安装ng2-file-upload模块 npm install ng2-file-upload --save 2.如果使用systemjs打包,需要在配置s ...
- Angular4 微信的坑
1.不要重置对象的引用!(重置只应该在组件或服务的初始化时) why:会使页面产生闪烁 2.不要给图片绑定一个空的值或空的图片引用(如果值从服务器异步过来,那应该在初始化时给它一个默认值) why:会 ...
- VMware安装VMware tool后mount /dev/cdrom /mnt成功挂载含rpm包的镜像
安装虚拟机后如果不安装vmware tool使用mount /dev/cdrom /mnt可以成功挂在含rpm包的镜像,但是安装VMware tool后挂在后/mnt中是错误的内容.查了半天后无果,自 ...
- .net 流(Stream) - StreamWriter和StreamReader、BinaryReader和BinaryWriter
转自:http://www.oseye.net/user/kevin/blog/86 一.StreamWriter和StreamReader 从上一篇博文可知文件流.内存流和网络流操作的都是字节,每次 ...
- easyui学习笔记8—在手风琴中加载其他的页面
在手风琴中加载其他页面和在表格中加载其他的页面有写类似的,就是请求另外一个页面显示数据. 1.先看看引用的资源文件 <link rel="stylesheet" href=& ...
- LaTeX-手动安装宏包(package)以及生成帮助文档的整套流程
我使用的是ctex套装,本来已经自带了许多package,但是有时候还是需要使用一些没有预装的宏包,这时就需要自己安装package了.下载package可以从CTAN(Comprehensive T ...
- [BJOI2018]治疗之雨
题目 我还没疯 发现如果我们将血量抽象成点,一轮操作抽象成图上的一条边,我们如果能求出每一条边的概率,我们就能搞一下这道题 假设我们求出了这个图\(E\),设\(dp_i\)表示从\(i\)点到达\( ...
- 【[ZJOI2006]物流运输】
一直不会做,觉得这是一道神题 于是万般无奈下去借鉴抄了一下题解 发现这就是一道套路题 我们用\(dp[i]\)表示前\(i\)天的最小总花费,于是我们就可以用一个常规的老套路来做了 那就是枚举断点 我 ...