在Rails中保存Base64字符串

时间:2011-08-13 12:07:08

标签: ruby-on-rails postgresql migration base64

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

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

1 个答案:

答案 0 :(得分:5)

如果您想要克服尺寸限制,可以在迁移中使用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)

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

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

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

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