Net :: HTTP获取PDF文件并使用paperclip保存

时间:2013-12-10 13:26:53

标签: ruby ruby-on-rails-3 paperclip

我会在网络服务器中下载PDF文件。我使用Net :: HTTP Ruby类。

def open_file(url)
  uri = URI.parse(url)

  http         = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true

  request = Net::HTTP::Get.new(uri.path)
  request.basic_auth(self.class.user, self.class.password)

  http.request(request)
end

它有效,我检索我的PDF文件,它是一个字符串,如:%PDF-1.3\n%\ ...

我有一个返回结果的方法:

def file
  result = open_file(self.file_url)
  times  = 0

  if result.code == 404 && times <= 5
    sleep(1)
    times += 1
    file
  else
    result.body
  end
end

(这是一种递归方法,因为可能该文件在服务器上不再存在)

但是当我用Paperclip保存这个文件时,我有一个错误:Paperclip::AdapterRegistry::NoHandlerError (No handler found for "%PDF-1.3\n% ...

我尝试用StringIO操纵文件...但没有成功:(。

有人有想法吗?

1 个答案:

答案 0 :(得分:4)

假设您获得的PDF对象没问题(我不是100%确定),那么您可以这样做:

file = StringIO.new(attachment) #mimic a real upload file
file.class.class_eval { attr_accessor :original_filename, :content_type } #add attr's that paperclip needs
file.original_filename = "your_report.pdf"
file.content_type = "application/pdf"

然后使用Paperclip保存文件。

(来自“Save a Prawn PDF as a Paperclip attachment?”)