我在 Rails 3.2 应用程序上使用 Paperclip gem,用户可以在其中上传包含图像和其他信息的专用文件类型(我们称之为“.elf”文件)。
我已经编写了通过一个名为 ElfObject 的类从 elf 文件中提取图像所需的所有代码,并且在应用程序的控制台中进行测试时效果很好。我想要做的是在 Paperclip 将其保存到 AWS S3 之前从 .elf 文件中提取图像和其他数据,将其他数据存储在模型中,然后仅将图像对象保存为 S3 上的 Paperclip 附件。这是模型中的相关代码:
class Photo < ActiveRecord::Base
validates_attachment :attachment,
:presence => true
has_attached_file :attachment,
:storage => :s3,
[[S3 credentials removed]]
before_attachment_post_process :import_photo
attr_accessible :name, :attachment, :properties
def import_photo
if attachment_file_name =~ %r{^*\.elf$}
origfile = attachment.queued_for_write
elf = ElfObject.read(origfile)
properties = elf.get_properties
attachment = elf.image.write "image_for_#{attachment_file_name}.png"
save!
end
end
当我尝试在应用程序上以这种方式上传时,它会从elf = ElfObject.read(origfile)行引发错误ArgumentError (Invalid argument 'file'. Expected String, got Hash. ) 。如果我尝试类似elf = ElfObject.read(origfile.path)的方法,我会得到NoMethodError (undefined method `path' for #)。
显然,我不完全了解如何在文件发布之前从 Paperclip 访问文件——关于我哪里出错以及如何修复它的任何想法?