【发布时间】:2014-07-01 20:35:39
【问题描述】:
我有一个带有多种样式的照片附件,所有这些样式都将图像转换为 jpg,例如:
styles: { original: { geometry: "1500x1500>", format: :jpg},
large: { geometry: "1000x1000>", format: :jpg } }
该模型还有一个before_post_process,可以将照片的文件名重命名为标准名称:
def rename_photo
extension = File.extname(photo_file_name).downcase
self.photo.instance_write :file_name, "original#{extension}"
end
这很好用:我上传的任何内容都会被转换并以JPG 的形式上传到 AWS S3。
但是,如果图像是PNG,则其文件名和内容类型相应地以original.png 和image/png 存储在db 中,而在S3 上则存储为JPG。当我查询照片的 url 时,也会返回正确的 JPG url。
因此,尽管一切正常,但不正确的信息存储在数据库中,这让我很困扰。
【问题讨论】:
-
如果原始文件是PNG,将原始文件名存储为
original.png是否正确?还是我错过了什么? -
@Jon,我想将所有上传的图片转换为 JPG。 Paperclip 可以完美地转换所有内容,但在数据库中将
photo_file_name存储为original.png和photo_content_type作为image/png,即使文件现在已转换为JPG。有趣的是,当我查询照片的 url 时,它会正确地将 url 返回到JPG文件。 -
Paperclip 还存储了原始上传文件的未修改副本,我怀疑它仍然是 png。因此,原始文件名是正确的。如果您真的不希望原件保存为 ORIGINAL 格式,则需要在“样式”哈希中为
:original定义样式。但请注意 - 如果您因为添加了新样式而想要重新处理所有附件,那么您将不再拥有原始附件。 -
@Jon,从我发布的代码中可以看出,我已经为
:original定义了一个样式,根据该代码,应该将原来的样式转换为jpg。事实上,原始文件被转换并存储为jpg,但数据库中的信息显示它仍然是png。因此问题。 -
好吧,我知道这不是您要求的,但我个人会更高兴“原始”文件名是原始的。如果您需要具有该格式和几何形状的样式,则只需创建一个
uploaded样式或其他东西并使用它。拥有你修改过的东西并称其为“原创”当然感觉不对。
标签: ruby-on-rails ruby-on-rails-3 paperclip