【问题标题】:Carrierwave Mongoid Image_tagCarrierwave Mongoid Image_tag
【发布时间】:2017-05-14 02:44:29
【问题描述】:

需要一些指导。 我通过carrierwaveuploader/carrierwave-mongoid 使用AvatarUploader 将其设置为默认设置,并且文件通过Gridfs 保存得很好

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

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

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

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

【问题讨论】:

    标签: ruby-on-rails mongoid carrierwave gridfs


    【解决方案1】:

    在没有帮助和更多研究之后,我找到了该怎么做。 使用我的 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 方法来满足您的需求。

    【讨论】:

    • 如果使用存储文件呢?而不是gridfs?谢谢
    猜你喜欢
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2020-05-20
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多