【问题标题】:Saving Base64 String in Rails在 Rails 中保存 Base64 字符串
【发布时间】:2011-08-13 12:07:08
【问题描述】:

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

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

【问题讨论】:

    标签: ruby-on-rails postgresql migration base64


    【解决方案1】:

    如果您想克服大小限制,可以在迁移中使用 text 或 binary 代替 string。

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

    API 文档给出了这个例子:

    td.column(:picture, :binary, :limit => 2.megabytes)
    # => picture BLOB(2097152)
    

    TEXT 或 BLOB(二进制)列的最大大小取决于您的 RDBMS(例如 MySQL、PostgreSQL)、可用内存和某些配置设置。例如,在 MySQL 中,您应该查看 max_allowed_packet 选项,您可以将其设置为最大 1 GB 的任何值。

    关于回形针的存储:

    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)可能会遇到困难。

    所以我希望你有充分的理由这样做。

    【讨论】:

    • postgresql 中字符串或 bytea 类型的最大大小为 2Gigs,但 OP 最大为 2M。所以他的头部空间很大。
    • 知道如何将二进制文件保存为图像,例如通过回形针?
    • 对不起,我的意思是我正在接收 base64 格式并需要转换为图像,但我现在找到了解决方案:请参阅stackoverflow.com/questions/4641728/…
    猜你喜欢
    • 1970-01-01
    • 2016-08-24
    • 2014-02-14
    • 2020-09-17
    • 2021-09-01
    • 2016-12-03
    • 2013-06-04
    • 2014-06-11
    • 1970-01-01
    相关资源
    最近更新 更多