rails中使用CarrierWave实现文件上传的功能
之前在用django写blog的时候头像上传和头像预览都是使用原生的js实现的,之前也有写了一篇blog。好了开始进入正题
rails中实现头像上传十分的方便,只要通过CarrierWave这个gem来实现就可以了。rails只能说他的gem都非常的好用,实现功能特别的快速。
我们先在Gemfile中引入这个gem
gem 'carrierwave'
然后执行bundle安装这个carrierwave。接下来在终端执行命令,创建头像的uploader(如果你上传的是其他的文件那么可以生成其他的uploader)
rails g uploader avatar
此命令会生成app/uploaders/avatar_uploader.rb文件。这个文件就是针对用户头像上传的配置文件,文件默认的配置如下:
class AvatarUploader < CarrierWave::Uploader::Base
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
- storage: 方法配置了文件存储方式,默认是存储到文件。
- __store_dir__: 方法是定义文件的存储目录。
保持默认的配置,继续往下走。接下来需要添加用户头像的存储字段:
rails g migration add_avatar_to_users avatar:string
rails db:migrate
然后到用户模型中,绑定用户头像字段和属于它的 uploader:
class User < ActiveRecord::Base
mount_uploader :avatar, AvatarUploader
end
最后在视图表单中添加头像上传的文件选择框:
<%= f.label :avatar %>
<%= f.file_field :avatar %>
大功告成。现在就可以测试一下用户头像的上传功能了。如果上传成功,会在 public 目录中出现 uploads/user/avatar 目录。里面有以用户 id 命名的文件夹,文件夹中保存了上传成功的文件。而用户头像字段 avatar 则保存了文件名。使用 user.avatar 就可以获取用户的头像地址。

CarrierWave 还有着更多可配置的特性。例如文件安全上传,文件上传时进行缩放和水印处理,云端存储等。每个特性都足以写一篇文章了,所以这里就此打住。我想留作日后实际使用过后再分享。可以前往它的 Github 项目页面去了解,地址是: https://github.com/carrierwaveuploader/carrierwave。
rails中使用CarrierWave实现文件上传的功能的更多相关文章
- zt对于C#中的FileUpload解决文件上传大小限制的问题设置
对于C#中的FileUpload解决文件上传大小限制的问题设置 您可能没意识到,但对于可以使用该技术上载的文件的大小存在限制.默认情况下,使用 FileUpload 控件上载到服务器的文件最大为 4M ...
- 分享知识-快乐自己:SpringMvc中的单多文件上传及文件下载
摘要:SpringMvc中的单多文件上传及文件下载:(以下是核心代码(拿过去直接能用)不谢) <!--设置文件上传需要的jar--> <dependency> <grou ...
- JavaWeb实现文件上传下载功能实例解析
转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...
- JavaWeb实现文件上传下载功能实例解析 (好用)
转: JavaWeb实现文件上传下载功能实例解析 转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web ...
- 【javascript】html5中使用canvas编写头像上传截取功能
[javascript]html5中使用canvas编写头像上传截取功能 本人对canvas很是喜欢,于是想仿照新浪微博头像上传功能(前端使用canvas) 本程序目前在谷歌浏览器和火狐浏览器测试可用 ...
- 多文件上传 iOS功能
多文件上传 iOS功能,原文来自ios教程网整理的,大家可以看看演示:ios.662p.com ,喜欢的朋友可以看看我的博客吧. NSURL* url = [NSURL URLWithString:@ ...
- JAVA中使用FTPClient实现文件上传下载实例代码
一.上传文件 原理就不介绍了,大家直接看代码吧 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...
- JAVA中使用FTPClient实现文件上传下载
在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件 ...
- action中实现对批量文件上传的封装
如今,文件(尤其是图片)上传,在前后台的应用相当普遍,上传头像.共享资料等已成为最基本应用.我们很希望通过一个万能的封装方法来实现一劳永逸的效果. 接下来,就来为大家介绍具体实现. 首先,我们需要一个 ...
随机推荐
- ubuntu 安装nodejs和git
1.安装curl sudo apt-get install curl 2.安装nodejs 和 npm curl -sL https://deb.nodesource.com/setup_8.x | ...
- 【Leetcode】【Medium】Permutations
Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...
- 安装和测试Kafka
本文主要介绍如何在单节点上安装 Kafka 并测试 broker.producer 和 consumer 功能. 下载 进入下载页面:http://kafka.apache.org/downloads ...
- 使用c++11写个最简跨平台线程池
为什么需要多线程? 最简单的多线程长啥样? 为什么需要线程池,有什么问题? 实现的主要原理是什么? 带着这几个问题,我们依次展开. 1.为什么需要多线程? 大部分程序毕竟都不是计算密集型的,简单的说, ...
- C#图解教程读书笔记(第3章 类型、存储及变量)
1.C#的中的数值不具有bool特性. 2.dynamic在使用动态语言编写的程序集时使用,这个不太明白,看到后面需要补充!! 动态化的静态类型 3.对于引用类型,引用是存放在栈中,而数据是存放在堆里 ...
- MS12-020蓝屏攻击
MS12-020远程桌面协议RDP拒绝访问漏洞 条件:受害者必须开放RDP协议 开放了3389端口 或者端口改了,知道对方RDP开放的对应端口. 过程:MSF利用 MSF显示为seems down说明 ...
- swagger ui和spring boot集成生成api文档
作者:小莫链接:https://www.zhihu.com/question/28119576/answer/134580038来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- 转发forward和重定向redirect的区别
本质区别:转发只发送一次请求,重定向发送两次请求. 转发: request.getRequestDispatcher("/HiServlet").forward(request,r ...
- VC++ MFC工程中中如何将一个工程的资源(如对话框)复制到另外一个工程
问题的提出:在工程1中用到的资源,在工程2中已有现成的.即工程1中要用到的对话框和工程2的完全相同,而工程2中对该对话框的布局已设计好.控件变量都绑定好了.但由于该对话框的控件特别多,如果在工程1中再 ...
- Segmentation fault(Core Dump)
Segmentation fault 这个提示还是比较常见的,这个提示就是段错误,这是翻译还是十分恰当的. Core Dump 有的时候给我们呈现的翻译很有趣是”吐核“,但是实际上比较贴切的翻译是核心 ...