`

rails mongoid + carrierwave

 
阅读更多

中间插件:gem 'carrierwave-mongoid' 

使用MongoDB's GridFS存储文件。

 

1、在Gemefile文件中添加carrierwave-mongoid

        gem 'mongoid'

        gem 'mongoid-grid_fs'

        gem 'carrierwave'

        gem 'carrierwave-mongoid'

        gem 'mini_magick'

 

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"

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics