我想将图像保存为base64字符串,作为Rails中模型的一部分。
有没有人对移植文件有建议?
我假设简单地设置一个String类型是不合适的,因为字符串的大小通常很大,例如> 2MB。
答案 0 :(得分:5)
如果您想要克服尺寸限制,可以在迁移中使用text
或binary
代替string
。
API文档给出了这个例子:
td.column(:picture, :binary, :limit => 2.megabytes)
# => picture BLOB(2097152)
TEXT
或BLOB
(二进制)列的最大大小取决于您的RDBMS(例如MySQL,PostgreSQL),可用内存和某些配置设置。例如,在MySQL中,您应该查看max_allowed_packet
选项,您可以将其设置为最大1 GB的任何内容。
关于使用Paperclip进行存储:
Paperclip不允许开箱即用的数据库存储,因此您必须为此编写一些自定义代码。谷歌给了我这个:
虽然已经过时了,所以我不确定它是否有用。
更重要的是:
请注意,通常不建议在数据库中存储文件,这就是Paperclip不支持它的原因。一些原因是一个坏主意:
当图像存储在数据库中时,每个图像请求都需要调用您的Rails应用和数据库,这会对性能产生大量负面影响。如果您将图像存储为文件或存储在Amazon S3上,您的应用程序将扩展得更好。
您的数据库变得非常快,这使得备份数据变得更加困难。
由于不同的RDBMS对列大小,列类型等有不同的规则,因此将大型列迁移到不同的数据库(例如从MySQL迁移到PostgreSQL)可能会遇到困难。
所以我希望你有充分的理由去做。