【问题标题】:Paperclip save attachment回形针保存附件
【发布时间】:2009-07-29 10:43:35
【问题描述】:

有没有更好的方法通过 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

【问题讨论】:

    标签: ruby-on-rails paperclip


    【解决方案1】:

    实际上有一个更好的方法——你可以将它包装到回形针增强的 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
    

    享受吧!

    【讨论】:

    • 我一直在寻找这样的东西。但这如何与回形针一起使用?如何从 ActionMailer 获取电子邮件附件,然后将附件(使用 StringIO)发送到回形针?
    【解决方案2】:

    Paperclip 将 文件 存储在您的模型旁边——这就是它的编写目的,所以我认为简短的回答是“否”。

    如果您在 Paperclip 源代码中查看 attachment.rb,您会看到一个名为 def assign uploaded_file 的方法。如果您查看此方法的实现,您会发现它希望上传的文件对象具有在其上定义的某些方法。

    您可以创建自己的类,该类遵循与 Paperclip 期望的相同接口,但老实说,您保存文件并将其分配给 Paperclip 的解决方案可能是最简单的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多