`
songgz
  • 浏览: 40515 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在Rails4中使用carrierwave-mongoid上传文件

阅读更多
在Rails4和Mongoid4中,使用MongoDB's GridFS存储文件。

步骤1:在Gemefile文件中添加carrierwave-mongoid。
gem 'mongoid', git: 'https://github.com/mongoid/mongoid.git'
gem 'mongoid-grid_fs', github: 'ahoward/mongoid-grid_fs'
gem 'carrierwave', :git => "git://github.com/jnicklas/carrierwave.git"
gem 'carrierwave-mongoid', :require => 'carrierwave/mongoid'
gem 'mini_magick', :git => 'git://github.com/probablycorey/mini_magick.git'


步骤2:创建carrierwave的配置文件config/initializers/carrierwave.rb。
#config/initializers/carrierwave.rb
CarrierWave.configure do |config|
  config.storage = :grid_fs
  
  # Storage access url
  config.grid_fs_access_url = "/upload/grid"
end


步骤3:在模型中设置要存储的文件
#app/models/user.rb
class User
  include Mongoid::Document
  mount_uploader :avatar, AvatarUploader
end


步骤4:创建上传文件的管理器。
#app/uploaders/avatar_uploader
class AvatarUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick

  def store_dir
    "#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  version :thumb do
    process :resize_to_limit => [200, 200]
  end
end


步骤5:创建GridFS控制器。
#app/controllers/gridfs_controller.rb
class GridfsController < ApplicationController

  def serve
    gridfs_path = env["PATH_INFO"].gsub("/upload/grid/", "")
    begin
      gridfs_file = Mongoid::GridFS[gridfs_path]
      self.response_body = gridfs_file.data
      self.content_type = gridfs_file.content_type
    rescue
      self.status = :file_not_found
      self.content_type = 'text/plain'
      self.response_body = ''
    end
  end
end


步骤6:配置路由。
#config/routes.rb
get "/upload/grid/*path" => "gridfs#serve"


现在在视图中使用 user.avatar.url 将得到一个有效文件的路径。
分享到:
评论

相关推荐

    carrierwave-mongoid:对CarrierWave的Mongoid支持

    mongoid在您的代码中要求它: require 'carrierwave/mongoid' 或者,在Rails中,您可以将其添加到您的Gemfile中: gem 'carrierwave-mongoid' , :require =&gt; 'carrierwave/mongoid' 注意:如果使用Rails 4,则需要...

    rails3-mongoid-devise, 示例 Rails 3.2应用,带有数据 Mongoid,用于验证.zip

    rails3-mongoid-devise, 示例 Rails 3.2应用,带有数据 Mongoid,用于验证 Rails 4.1有关设计的Rails 4.1示例应用程序,请参见:rails设计有一个用于设计的教程:Rails 设计教程。类似示例和教程这是来自 RailsApps...

    carrierwave-imageoptimizer:该宝石可让您通过jpegoptim或optipng轻松优化CarrierWave图像

    gem 'carrierwave-imageoptimizer'然后执行: $ bundle或将其自己安装为: $ gem install carrierwave-imageoptimizer在Heroku上安装如果您在生产中使用Heroku,则必须使用来安装optipng和jpegoptim 。 有一些即插

    rails-carrierwave-s3:使用 Rails 中的 Carrierwave 将图像上传到 S3

    使用 Rails 中的 Carrierwave 将图像上传到 S3。 克隆这个 repo,然后运行: bundle install rake db:migrate 之后,您需要从 AWS 获取密钥以上传到 S3。 将这些密钥存储在您的config/secrets.yml文件中。 这是...

    carrierwave-ftp:允许使用FTP为CarrierWave上传器上传文件

    CarrierWave FTP存储 该gem增加了对将FTP上传到支持安装安装最新版本: gem install carrierwave-ftp在您的代码中要求它: require 'carrierwave/storage/ftp'或者,在Rails中,您可以将其添加到您的Gemfile中: gem...

    carrierwave-ffmpeg-encoder:用于Ruby on Rails Web框架的音频视频文件处理的经典解决方案

    CarrierWave Ffmpeg编码器使用ffmpeg和streamio-ffmpeg rubygems添加音频/视频文件编码器。安装gem install carrierwave-ffmpeg-encoder使用捆绑器: gem 'carrierwave-ffmpeg-encoder'用法class AttachmentUploader...

    carrierwave-video-thumbnailer:Carrierwave的缩略图插件,可轻松将上传的视频缩略图化

    它可以混入您的上传器设置中,并轻松为您上传的视频提供缩略图。 该软件目前是Alpha版,因此欢迎任何形式的OpenSource合作。 演示版 入门 先决条件 ffmpegthumbnailer二进制文件应位于PATH上。 安装 gem install ...

    mongoid最新包

    MongoDB 是一个流行的开源、分布式文档数据库,而 Mongoid 是一个 Ruby 框架,用于在 Ruby on Rails 或其他 Ruby 应用程序中方便地操作 MongoDB 数据库。它提供了 ORM(对象关系映射)功能,使得开发人员可以使用...

    carrierwave-blob:载波的BLOB存储

    将文件上传存储在数据库中 该gem允许将上传内容存储在数据库中,例如。 在具有短暂文件系统(如Heroku)的平台上。 安装 # In: Gemfile gem 'carrierwave-blob' , github : "samvincent/carrierwave-blob" 用法 ...

    rails-yelp-mvp-源码.rar

    8. **Gem依赖**:Rails项目通常依赖于许多社区gem,如Devise(用户认证)、Paperclip或Carrierwave(文件上传)、Pundit或CanCanCan(授权管理)、Bootstrap-sass(前端组件)等。 9. **版本控制**:项目很可能使用...

    rails-documentation-1-2-1.zip

    此压缩包中的 "rails-documentation-1-2-1.chm" 文件很可能是一个帮助文件或HTML编译的文档,用于详细解释 Rails 1.2.1 版本的各种特性和使用方法。 Rails 是一个高度灵活且强大的开发工具,它简化了 Web 开发过程...

    carrierwave-crop:使用带有预览功能的Jcrop插件进行载波扩展以裁剪上传的图像

    入门在资产中添加所需的文件在application.js //= require jquery//= require jquery.jcrop在application.css *= require jquery.jcrop生成用于裁剪的咖啡脚本: rails generate cropper user avatar这应该给您一个...

    rails-react-components-源码.rar

    在源码中,可以学习如何设置Redux store,编写reducer和action,以及如何在React组件中使用connect函数来连接store。 6. **React Router与Rails路由协作** React Router是React应用的路由解决方案,允许我们在...

    flexigrid+rails 新手代码-。-

    - 在 Rails 应用中集成 Flexigrid,通常会在控制器中处理数据查询,然后通过 JSON 或者其他格式返回到前端。 - 视图部分,开发者会编写 HTML 和 JavaScript 代码,使用 Flexigrid 的 API 来展示和操作从 Rails ...

    rails-chm-2-0-2.rar

    在Rails 2.0.2中,开发者可以体验到以下关键知识点: 1. **安装与设置**:Rails可以通过Gem包管理器进行安装。了解如何配置数据库连接、创建新项目、以及设置路由是初学者的基础。 2. **模型(Model)**:模型是...

    rails-documentation-2-0-2

    rails-documentation-2-0-2

    carrierwave-aliyun:阿里云OSS Ruby报告组件,基于Carrierwave

    注意:此Gem是一个CarrierWave的组件,你需要配合CarrierWave一起使用,如果你需要直接用Aliyun OSS,可以用这个Gem。 注意:此gem是的扩展,因为它支持使用Alicloud OSS作为存储后端,如果要直接使用Alicloud OSS...

    rails-development-environment-master.rar

    4. **Bundler**: Bundler是Ruby中的依赖管理工具,它允许开发者定义项目所需的Gem和版本,并确保在所有环境中一致。 5. **数据库**: 根据项目需求,你可能需要安装MySQL、PostgreSQL或SQLite等数据库系统。 6. **...

    rails-beginner-s-guide

    书中的这部分内容指导读者如何在Rails应用中使用流式传输技术。 最后,书中还介绍了Rails中的表单构建器(Form Builder),渲染器(Renderer)和railties辅助工具(Helpers)。Rails的表单构建器简化了表单创建过程...

    Ajax-Rails-4-AJAX-Form.zip

    Ajax-Rails-4-AJAX-Form.zip,rails 4 ajax表单示例,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不重新加载网页的情况下...

Global site tag (gtag.js) - Google Analytics