在Rails中保存Base64字符串

ama*_*euk 4 migration postgresql base64 ruby-on-rails

我想将图像保存为base64字符串作为Rails中模型的一部分.

有没有人有迁移文件的建议?
我假设简单地设置一个String类型是不合适的,因为字符串的大小通常很大,例如> 2MB.

M. *_*her 6

如果要克服大小限制,可以在迁移中使用textbinary代替string迁移.

http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html#method-i-column

API文档提供了此示例:

td.column(:picture, :binary, :limit => 2.megabytes)
# => picture BLOB(2097152)
Run Code Online (Sandbox Code Playgroud)

最大尺寸TEXTBLOB(二)列取决于你的RDBMS(如MySQL和PostgreSQL),可用内存,并且某些配置设置.例如,在MySQL中,您应该看看该max_allowed_packet选项,您可以将其设置为最大1 GB的任何内容.

关于Paperclip的存储:

Paperclip不允许开箱即用的数据库存储,因此您必须为此编写一些自定义代码.谷歌给了我这个:

http://patshaughnessy.net/2009/5/29/paperclip-sample-app-part-3-saving-file-attachments-in-a-database-blob-column

它已经过时了,所以我不确定它是否有用.

更重要的是:

请注意,通常不建议在数据库中存储文件,这就是Paperclip不支持它的原因.一些原因是一个坏主意:

  1. 当图像存储在DB中时,每个图像请求都需要调用您的Rails应用程序数据库,这会对性能产生巨大的负面影响.如果您将图像存储为文件或存储在Amazon S3上,您的应用程序将扩展得更好.

  2. 您的数据库变得非常快,这使得备份数据变得更加困难.

  3. 由于不同的RDBMS对列大小,列类型等具有不同的规则,因此将大列迁移到不同的数据库(例如,从MySQL到PostgreSQL)可能会遇到困难.

所以我希望你有充分的理由去做.