Rails:从数据库的 blob 字段中显示图像

11

我成功地将图像Blob存储到了MySQL数据库中(字段中有一个大的十六进制数字),但是我找不到任何关于如何在Rails环境中显示图像的文档...当它被打印出来时,它以GIF89...开头,然后是你在Notepad中打开GIF时看到的乱码字符。:P 任何线索将不胜感激!

谢谢。

3个回答

27
以下代码应该有效。在您的控制器中,创建一个方法:

def show_image
    @user = User.find(params[:id])
    send_data @user.image, :type => 'image/png',:disposition => 'inline'
end

根据您的看法:


<%= image_tag url_for(:controller => "mycontroller", :action => "show_image", :id => @user.id) %>

我建议使用Paperclip gem,它可以让保存/查看图像变得非常容易。


谢谢,能用了。Paperclip可能是我最终选择的方式,但是为了演示目的,我需要一个快速且粗略的解决方案。 - wulftone
@wulftone。很高兴能够提供帮助。 - Raunak

16

因为你提到了“快速而简单”的方法,我会抛出这个作为替代方案 -

<%= ('<img src="data:image/jpg;base64,%s">' % Base64.encode64(@the_data)).html_safe %>

我认为这是最接近你想要做的事情了。虽然这段代码有一些不应该直接使用的原因,但它很简单。我需要再考虑一下将整个内容标记为html_safe是否是一个非常糟糕的想法。此外,在旧版本的IE中这将无法工作。


我刚刚将它提取到一个帮助程序中 :) - belgoros
我也想知道%s">' % Base64.encode64(@....这部分的含义是什么???(百分号后跟着s再跟着百分号) - belgoros

5
你还应该添加:

resources :users do
     get 'show_image', :on => :collection
 end

或者
get users/show_image" => "users#show_image"

之前

route.rb 文件中的 resources :users


@silvio Rails 4 会报错:ActionView::Template::Error (没有匹配的路由 {:controller=>"user_controller", :action=>"show_image", :id=>9777}): - Daniel Da Cunha
谢谢,这绝对是Rails 4必备的。 - trinaldi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接