Carrierwave Mongoid Image_tag

Carrierwave Mongoid Image_tag

需要一点指导。 我通过 carrierwaveuploader/carrierwave-mongoid 使用 AvatarUploader 将其设置为几乎默认设置,文件通过 Gridfs

保存良好

问题是当我使用 image_tag 时,我得到的 url 看起来像 http://some.domain.com/images/uploaded/users/avatar/:user_id/:file_name

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

我无法通过 image_tag 的 HTTP 访问此文件。我得到 No route matches [GET] "/images/uploads/user/avatar/... 有任何想法吗?我是载波的新手。

Rails 5.0.2, 载波 (0.11.2), carrierwave-mongoid (0.10.0), mongoid (6.0.2)

在没有帮助和更多研究之后,我找到了该做什么。 使用我的 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

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

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 方法来满足您的需要。