Ruby on Rails显示blob为图像



我正在创建一个Ruby on Rails应用程序,其中我将图像存储为MySQL数据库中的blobs。我正在查询数据库,并试图在我的视图中显示图像,但我无法样式化它或将其他HTML放在它周围,它只是显示在黑色背景上。

这就是我在Controller中做的:

def get
@data = Data.find(1)
send_data @data.image_object, :type => 'image/png', :disposition => 'inline'
end

这显示了没有其他HTML的图像,我不能给它设置样式。我能做什么?image_object是一个blob,我需要将其转换为我可以在视图中渲染的图像。我不能使用GCP, AWS或Azure云存储,我需要将图像存储在MySQL中。

任何帮助都将是感激的,提前谢谢你。

您需要渲染一个页面(而不是下载图像)。

所以在控制器中:

def show # better to stick with Rails conventions, use "show" rather than "get"
@data = Data.find(1)
end

这将自动渲染app/views/controllername/show.html。动词页面,使用app/views/layouts/application.html。erb布局

<img src=#{@data.image_object} />

这个图像标签的呈现假定您的图像不是作为blob存储的,而是以data-uri格式存储的:"data:image/png;base64,"

如果你真的想坚持blob存储,你必须在控制器或模型中转换它。

现在你有了一个图像元素,你可以用div包装,并使用css样式。

最后……您没有义务使用云存储将图像存储为单独的JPG或PNG文件,您可以将其存储在您自己服务器上的目录中。通常,它是Rails目录结构之外的目录,因此它可以在代码更新中保存下来。这将是一个非常正常的方式来上传和下载图像文件。Rails 7现在适应了这一点,但在Rails 6和之前,我们会使用类似载波宝石的东西。当您将图像存储为单独的文件时,在视图中呈现它们比尝试呈现blob更直接。

最新更新