我在使用 Paperclip 时遇到了一个烦人的问题。Paperclip 在上传 jpg/gif 文件时工作正常,但在 .targa 文件上出现“无法识别”错误。只是为了确认,它可以 100% 使用 jpg/gif/png 文件,并且我安装了 imagemagick 并且可以正常工作,此错误仅发生在 .tga 文件中。
回形针的一般流程是:
- 用户上传文件
- 创建包含该文件内容的 Tempfile
- 在 Tempfile 上运行 identify 命令以获取图像的宽度/高度。
对于 jpg/png/gif 文件,identify 可以在文件上运行而无需有效的扩展名(例如 .jpg)来识别文件类型。但是,在识别 .tga 文件时,需要在文件名中添加“.tga”扩展名。
问题是这样的:
当 Paperclip 创建临时文件时,它创建的名称类似于:stream.0.1。由于该临时文件缺少.tga 扩展名,因此识别命令无法解析图像的尺寸,从而导致“无法识别”。
我不知道如何解决这个问题,我能想到的最好的办法是使用常规 File.new 命令而不是 Tempfile.new 来创建具有随机名称但文件扩展名正确的临时文件。这还需要在自定义代码中修补以在处理完成后删除文件,而不是依赖 Ruby 内置的在使用后删除临时文件的能力。
有人对我可以解决此问题的最佳方法有一些想法吗?