Rails 2.3 数据库中的回形针 gem 和自定义文件名

发布于 2024-12-26 03:58:33 字数 145 浏览 1 评论 0原文

我正在尝试使用初始化程序中的 Paperclip.interpoles 为通过回形针 gem 上传的文件创建自定义文件名。我遇到的问题是,这是在上传文件时更新文件系统上的自定义文件名,但数据库文件名仍然是源文件的名称。有没有更好的方法然后必须重新分配数据库属性来处理这个问题?

I'm trying to create a custom filename for files uploaded via the paperclip gem using Paperclip.interpoles in the initializer. The problem I'm having is this is updating the custom filename on the file system when the file is uploaded, but the database filename remains the name of the source file. Is there a better way then having to reassign the database attribute to handle this?

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

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

发布评论

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

评论(1

深海里的那抹蓝 2025-01-02 03:58:33

尝试在 ActiveRecord 中使用 before_create 回调。由于回形针在调用 ActiveRecord::Base#save 之前不会将附加资源写入磁盘,因此这似乎是创建自定义文件名的正确时机。

为此,只需注册一个普通方法来创建自定义文件名。这将更改附加图像的名称,然后您将在文件系统和数据库中找到该图像。

假设您有一个模型,您想要在其中附加具有自定义随机文件名的图像。

在您的模型中:

has_attached_file :image
before_create :randomize_image_file_name

也在您的模型中:

def randomize_image_file_name
  extension = File.extname(image_file_name).downcase
  self.image.instance_write(:file_name, "#{ActiveSupport::SecureRandom.hex(8)}#{extension}")
end

您可以在任何地方声明您的方法,尽管将回调方法声明为受保护或私有被认为是很好的做法。

这将以自定义随机文件名保存附件。

希望这有帮助。

Try using before_create callback in ActiveRecord. As paperclip will not write the attached resource to disk until ActiveRecord::Base#save is called, this seems to be the right time to create your custom filename.

To do so, just register an ordinary method to create the custom filename. This will change the name of the attached image, which you'll then find on your file system and in your database.

Let's say you have a model, where you want to attach an image with a custom random filename.

In your model:

has_attached_file :image
before_create :randomize_image_file_name

Also in your model:

def randomize_image_file_name
  extension = File.extname(image_file_name).downcase
  self.image.instance_write(:file_name, "#{ActiveSupport::SecureRandom.hex(8)}#{extension}")
end

You can declare your method anywhere you want, though it's considered good practice to declare callback methods as protected or private.

This will save the attachment with a custom randomized filename.

Hope this helps.

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