`
doabit
  • 浏览: 52953 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

Mongoid 文件上传CarrierWave 和paperclip

阅读更多
    RAILS中使用mongoDB二种选择,mongoid和mongoMapper,不过MM我个人感觉对RAILS3支持不好,而且现在不能很好的和 devise 结合,所以最终选择mongoid。
    mongoid上传有二种选择,一种是CarrierWave,比较好地支持mongoid,
   CarrierWave
    1.安装CarrierWave gem,
    
sudo gem install carrierwave 

     2.配置Gemfile
     
gem "carrierwave"

     3.生成uploader
     
rails generate uploader Avatar
这里要注意,正常应该生成
   
app/uploader/avatar_uploader.rb
不过现在好像有问题,生成的文件名:avatar.rb,要自己改成avatar_uploader.rb
      4.创建示例
      
 rails g scaffold user name:string
生成用户
      5.为用户添加头像
  
    require 'carrierwave/orm/mongoid'
        class Post
            include Mongoid::Document
             field :name
 
             mount_uploader :file, AvatarUploader
         end

        6,修改表单
  
        <%= form_for(@user, :html => {:multipart => true}) do |f| %>
  
  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :FIle %><br />
   	<%= f.file_field :avatar %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

       7.修改show.html.erb
          添加
<%=image_tag @user.avatar_url%>

      具体设置什么可以参考:http://github.com/jnicklas/carrierwave

   不过我个人感觉 carrierwave并不完善,已发现问题:
   1.更新不会删除原来的文件
   2,删除记录不会删除文件夹,同时,如果如果更新过,产生的以前的文件也不会删除,这个比较让人头痛
   3.白名单验证在mongoid  下有问题,不起作用。。例如我用
   
 def extension_white_list
        %w(jpg jpeg gif png)
      end

   结果无效,ActiveRecord下正常。
  
    paperclip比较强大,但在mongoid   下有问题,修改点东西就可以了
   1. 在config/initializers/paperclip中加上
    
Paperclip.options[:log] = false


   2.修改model
    class Post
  include Mongoid::Document
  include Paperclip
  field :title
  field :body
  field :file_file_name
  field :file_content_type
  field :file_file_size, :type => Integer
  field :file_updated_at, :type => Time

   has_attached_file :file
end

  经过修改目前可以正常工作,

总结,CarrierWave比较好地支持mongoid,不过存在这样那样的问题,改起来比较麻烦,paperclip没有全面支持mongoid,不过修改一点东西就可以很好地使用,于是,又换回paperclip了。。。
分享到:
评论

相关推荐

    rails上传文件_paperclip

    在控制器中,文件会自动保存到数据库和文件系统中: ```ruby def create @user = User.new(user_params) if @user.save redirect_to @user, notice: 'User was successfully created.' else render :new ...

    mongoid-paperclip:蒙古族

    设定宝石文件gem "mongoid-paperclip" 接下来,假设我们有一个用户模型,并且我们希望允许我们的用户上传头像。 Rails.root / app / models / user.rb-包含Mongoid :: Paperclip模块并调用提供的类方法class User ...

    ruby上传文件

    9. **Carrierwave或Paperclip**:这两个是Ruby社区广泛使用的文件上传库,它们提供了处理文件上传、缩略图生成、版本控制等功能,简化了开发流程。 10. **Validation**:在保存文件信息到数据库之前,你可能需要...

    Ruby-CarrierWaveRubyWeb框架更优雅的解决方案文件上传

    Ruby-CarrierWave 是一个流行的文件上传库,专为Ruby Web框架如Rails和Sinatra设计,旨在提供一种更优雅、更灵活的方式来处理文件上传。它弥补了Ruby标准库在处理文件上传时的不足,提供了丰富的功能和易于定制的...

    file_validators:将文件验证器添加到ActiveModel

    文件验证器 File Validators gem将文件大小和内容类型验证添加到ActiveModel。 任何使用ActiveModel的模块,例如... 经过测试,可以与Carrierwave,Paperclip,Dragonfly,Refile等文件上传解决方案一起使用。 验

    Rails的文件附件扩展Paperclip.zip

    Paperclip 是 Rails 框架的一个插件,用于扩展 ActiveRecord 以支持简单的文件附件的功能。 标签:Paperclip

    Ruby-PaperClipActiveRecord的简单文件附件管理

    在视图层,PaperClip提供了一些便利的方法来显示和处理上传的文件。例如,你可以使用`image_tag`辅助方法来显示用户头像: ```erb ``` PaperClip也支持文件删除和更新。当模型实例被更新或删除时,相关的文件也会...

    升级版本后Rails的文件上传

    8. **安全**:确保上传的文件不会导致安全问题,如防止跨站脚本攻击(XSS)和文件包含漏洞。限制可接受的文件类型和大小,使用安全的文件名生成策略。 9. **错误处理**:处理上传失败的情况,如网络中断、文件过大...

    rails 文件上传

    5. **CarrierWave**: 如果你的Rails版本较低,或者需要更灵活的文件上传控制,可以使用CarrierWave库。它提供了一个简单的接口来处理文件上传,包括存储位置、版本管理和缩略图生成等。 6. **Paperclip**: ...

    paperclip模板

    Paperclip - Responsive Professional Theme for Business Projects and Mobile Apps Perfect for business and personal use Built with LESS Looks great on all major browsers, tablets and phones 21 unique ...

    paperclip-s3-tutorial-korean:回形针文件上传到 s3 韩文

    回形针上传到 S3 要求 aws-sdk 回形针 宝石安装 Gemfile gem ' aws-sdk ' gem ' paperclip ' 并运行 bundle install 创建 s3 这里 设置s3信息 从获取访问密钥和秘密密钥并将它们写好。 然后创建一个config/aws....

    Web开发敏捷之道-应用Rails进行敏捷Web开发-第三版(pdf)

    Rails框架的一个显著特点是其丰富的 gems 生态系统,书中会介绍如何选择和使用这些gem来扩展应用的功能,如Devise用于身份验证,CanCanCan进行权限管理,Carrierwave或Paperclip处理文件上传等。同时,还会讲解如何...

    paperclip_torrent:生成一个.torrent文件以补充您的回形针上传

    将已处理的回形针附件转换为可下载的torrent文件,以供以后检索。 设置 当前,PaperclipTorrent在Paperclip上需要一个边缘版本以支持多种样式保存。 要使用,请将以下内容添加到您的Gemfile中: gem 'paperclip',...

    ruby on rails合集

    Ruby on Rails的社区非常活跃,拥有丰富的插件和gem(Ruby的库包),如Devise用于身份验证,CanCanCan进行权限管理,Carrierwave或Paperclip处理文件上传等。这些gem极大地扩展了RoR的功能,使得开发者可以快速搭建...

    paperclip-storage-encrypted_filesystem:使用常规文件系统存储提供程序和 ActiveRecord 通过自动附件加密扩展 Paperclip

    这个 gem 使用常规文件系统存储提供程序和 ActiveRecord 通过自动附件加密扩展了 Paperclip。 安装 将此行添加到应用程序的 Gemfile 中: gem 'paperclip-storage-encrypted_filesystem', git: '...

    使用Rails上传和转换视频

    在Rails中,最常用的文件上传库是Paperclip和CarrierWave,但现在更推荐使用ActiveStorage,这是Rails 5.2及更高版本内置的一个功能。ActiveStorage直接与数据库交互,方便管理和存储文件,同时支持通过第三方服务如...

    Ruby on Rails 学习案例

    10. **Gem包管理**:Ruby的Gem是类似Python的pip或Node.js的npm的包管理工具,Rails应用广泛依赖于Gems,如Devise用于身份验证,Pundit或CanCanCan用于权限管理,Carrierwave或Paperclip处理文件上传等。 11. **...

    Rails的自动完成分页插件

    在Rails应用中处理文件上传,常见的插件有Paperclip、Carrierwave或ActiveStorage(自Rails 5.2起内置)。这些插件提供了处理文件上传、存储、版本控制和删除的功能。它们可以将文件存储在本地磁盘、云服务如Amazon...

    The.Art.of.Rails.May.2008

    8. **Rails插件与gem**:介绍常用的Rails插件和gem库,如Devise用于身份验证,Carrierwave或Paperclip用于文件上传等。 9. **社区和工具**:Rails拥有强大的社区支持,书中可能提到社区资源、开发工具(如Rails ...

Global site tag (gtag.js) - Google Analytics