Carrierwave Mongoid Image_tag

时间:2017-05-14 02:44:29

标签: ruby-on-rails mongoid carrierwave gridfs

请稍微指导一下。 我通过carrierwaveuploader/carrierwave-mongoidArrayList<>设置为默认设置,并通过Gridfs保存文件

问题是,当我使用AvatarUploader时,我会看到image_tag

的网址

我需要公开查看图片 文档并没有真正告诉你该怎么做。

我无法通过HTTP为http://some.domain.com/images/uploaded/users/avatar/:user_id/:file_name访问此文件。我得image_tag 有任何想法吗?我是carrierwave的新手。

Rails 5.0.2 carrierwave(0.11.2) carrierwave-mongoid(0.10.0) mongoid(6.0.2)

1 个答案:

答案 0 :(得分:0)

在没有任何帮助和更多研究后,我发现了该做什么。 使用我的image_url http://some.domain.com/images/uploaded/users/avatar/:user_id/:file_name

首先需要创建GridfsController,然后创建发送数据的方法:

def avatar
    @user = User.find(params[:id])
    content = @user.avatar.read
    if stale?(etag: content, public: true)
        send_data content, type: @user.avatar.file.content_type, disposition: "inline"
        expires_in 0, public: true
    end
end

def thumb_avatar
    @user = User.find(params[:id])
    content = @user.avatar.tiny_thumb.read
    if stale?(etag: content, public: true)
        send_data content, type: @user.avatar.tiny_thumb.file.content_type, disposition: "inline"
        expires_in 0, public: true
    end
end

然后在grid_fs_access_url中配置initializers/carrierwave.rb(您可能需要创建文件)

CarrierWave.configure do |config|
    config.grid_fs_access_url = "/images"
end

然后你必须创建路线

match '/images/uploads/user/avatar/:id/:filename' => 'gridfs#avatar', via: :get
match '/images/uploads/user/avatar/:id/:filename' => 'gridfs#thumb_avatar', constraints: { filename: /thumb.*/ }, via: :get

现在您可以使用image_tag访问该图像。您可以计算更多路线和GridfsController方法以满足您的需求。