在 Rails 中保存 Base64 字符串

发布于 2024-11-29 04:33:31 字数 124 浏览 0 评论 0原文

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

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

I want to save an image as a base64 string as part of a model in Rails.

Does anyone have advice for the migration file?
I assume that simply setting a type of String would not be suitable, given that the size of the string is often large e.g. > 2MB.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

得不到的就毁灭 2024-12-06 04:33:31

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

TEXT 或的最大大小BLOB(二进制)列取决于您的 RDBMS(例如 MySQL、PostgreSQL)、可用内存和某些配置设置。例如,在 MySQL 中,您应该查看 max_allowed_pa​​cket 选项,您可以将其设置为最大 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)可能会遇到困难。

所以我希望你无论如何都有充分的理由这样做。

You could use either text or binary instead of string in your migration if you want to overcome the size limitation.

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

The API documentation gives this example:

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

The maximum size of TEXT or BLOB (binary) columns depends on your RDBMS (e.g. MySQL, PostgreSQL), available memory, and certain configuration settings. For instance, in MySQL, you should have a look at the max_allowed_packet option, which you can set to anything up to 1 GB.

Regarding storage with Paperclip:

Paperclip doesn't allow database storage out of the box, so you have to write some custom code for that. Google gives me this:

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

It's outdated though, so I'm not sure if it's helpful.

More importantly:

Note that storing files in database is generally not recommended which is why Paperclip doesn't support it. Some reasons it's a bad idea:

  1. When images are stored in DB, every image request requires a call to your Rails app and the database, which has a massive negative effect on performance. If you store images as files or on Amazon S3, your app will scale much better.

  2. Your database becomes large very quickly, which makes it harder to backup your data.

  3. Since different RDBMS have different rules for column size, column types, etc., migrating large columns to a different database (e.g. from MySQL to PostgreSQL) may involve difficulties.

So I hope you have a good reason to do it anyway.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文