有没有更好的方法可以将一些字符串作为附件通过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
答案 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的解决方案可能是最简单的方法。