Rails 4 如何将图片以 blob 格式加载到数据库中

3
我在网上搜索了很多,我认为Paperclip可能是我的最佳选择。但我不知道如何使用它将图像文件从Rails 4上传到MySQL数据库中。 是的,我知道将其加载到文件夹中更好,但我需要将其加载到数据库中。 因此,如果您能帮助我,将不胜感激。
谢谢

1
为什么要将图像放入数据库中?根本没有理由。 - Phlip
这是项目的需求。我知道将其上传到文件夹会更好。 - morfious902002
请忽略回答中的“您只在数据库中存储文本...”,并将图像存储在 BLOB 中。但是,如果没有比“这是项目要求”更多的信息,实际上很难提供帮助。 - Phlip
@Phlip,有很多原因,包括分片、复制、文件系统限制等。 - NARKOZ
2个回答

7
你不需要使用carrierwavepaperclip上传gems来将图像存储为blob。
以下是一个示例,演示如何将图像存储在二进制字段(raw_file)中。
表单:
<%= form_for @user do |f| %>
  <%= f.file_field :avatar %>
<% end %>

控制器:

def create
  @user = User.new(params[:user])
  # store uploaded avatar as blob
  @user.raw_file = params[:user][:avatar].read
  @user.save
end

使用 RMagickmini_magick 将图像从 blob 转换。


1

我觉得你对Rails中的图片上传方式(特别是Paperclip/Carrierwave)有些混淆了。我会为你解释一下它们是如何工作的:


你的数据库中只存储文本和引用(不包括图片)

MYSQL 和 Rails 只在数据库中存储文本,不会存储其他内容。应用程序的工作方式是将数据表中的数据与应用程序中的其他代码和资源链接起来,以使其共同运作。

Paperclip 和 Carrierwave 不会将图像存储在数据库中,它们将它们存储在 Rails 应用程序的 /public/system 文件夹中(如果您希望将它们放在 S3 上,则可以这样做)。然后,它们通过在数据库中存储图像名称来链接到图像。就是这样。

当您想要加载图像时(例如使用 Paperclip),实际上您将使用 ActiveRecord 加载 image 数据表的内容,而 Paperclip 将根据其创建自己的 ActiveRecord 对象。


使用Paperclip或CarrierWave会帮助你

你应该查看这个Railscast,它会给你很大的帮助: RailsCast


这是一项作业要求,后来被教授更改了。 - morfious902002

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