回形针保存附件

时间:2009-07-29 10:43:36

标签: ruby-on-rails paperclip

有没有更好的方法可以将一些字符串作为附件通过Paperlip保存为制作tmp文件,将字符串放入其中,再次打开它并将其另存为附件?

像这样:

  def save_string data
    tmp_file = "/some/path"
    File.open(tmp_file,'w') do |f|
      f.write(data)
    end

    File.open(tmp_file,'r') do |f|
      ceneo_xml = f
      save!
    end
  end

2 个答案:

答案 0 :(得分:4)

实际上有一种更好的方法 - 你可以将它包装到PaperIO增强的StringIO中,你很快就会得到一个伪上传文件。您可以通过定义实例方法来自定义它,也可以像这样直接创建StringIO的子类

class InvoiceAttachment < StringIO
 def initialize(invoice, content)
   @invoice = invoice
   super(content)
 end

 def original_filename
   from = @invoice.from
   to = @invoice.to
   date = @invoice.created_at.strftime('%B-%Y').downcase 
   "invoice_#{date}_from_#{from}_to_#{to}.pdf"
 end

 def content_type
   'application/pdf'
 end
end

享受!

答案 1 :(得分:0)

Paperclip将文件存储在您的模型旁边 - 这就是它所写的内容,所以我认为简短的回答是“不”。

如果您在Paperclip来源中查看attachment.rb,您会看到一个名为def assign uploaded_file的方法。如果查看此方法的实现,您可以看到它希望上载的文件对象具有在其上定义的特定方法。

你可以创建自己的类,它遵循Paperclip期望的相同界面,但说实话,保存文件并将其分配给Paperclip的解决方案可能是最简单的方法。