zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    SQL中使用WITH AS提高性能
    电子邮件原理
    DirectoryEntry 活动目录的使用
    Entity Framework 教程(转)
    用sp_addlinkedserver建立链接服务器(sql server2008中通过测试)
    SQL2008和SQL2000可以跨服务器连接查询的测试实例
    Linq快速入门——扩展方法
    easyui 很好很强大
    【转】Jmeter内存溢出处理方式记录
    【转】Jmeter安装成功后的目录介绍
  • 原文地址:https://www.cnblogs.com/Stay-J/p/9547030.html
Copyright © 2011-2022 走看看