如何为临时文件设置内容类型

时间:2014-02-16 07:23:51

标签: ruby-on-rails paperclip

我有一个rake任务,它可以获取XML文档并将其保存到我的应用程序中的模型中。该任务一直有效,直到我将content_type的验证添加到模型

现在任务给出错误:

Datafile content type is invalid, Datafile is invalid

如何将tmp文件的content_type设置为text / xml以便验证通过?

任务代码如下:

  task :fetch_documents => :environment do        
    Net::FTP.open("www.example.com", "xxxxx", "xxxxx") do |ftp|          
      ftp.nlst.each do |file_name|
        tmp = Tempfile.new(['foo', '.xml' ])
        ftp.gettextfile(file_name, tmp.path)
        # save it
        document = Document.new
        document.file_name = File.basename(file_name)
        document.datafile = tmp
        document.save!
        tmp.close
        end
     end
  end

1 个答案:

答案 0 :(得分:1)

我能够找到要使用的内容类型:

gem install mime-types

并添加到我的佣金任务中:

require 'mime/types' 

然后我闯入了pry repl并使用了

MIME::Types.type_for(tmp.path).first.content_type 

这使我能够将正确的mime类型添加到模型验证中:

application/xml

我不确定为什么文件是application / xml,当表单上传的文件是text / xml但事后看来,这是一个非常明显的修复!