Rails 3 - Tempfile路径?

时间:2010-12-05 03:15:56

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

我有以下内容:

attachments.each do |a|
   Rails.logger.info a.filename
   tempfile = Tempfile.new("#{a.filename}", "#{Rails.root.to_s}/tmp/")
   Rails.logger.info tempfile.path
end

附件来自回形针。

以下是输出:

billgates.jpg
/Users/bhellman/Sites/cline/tmp/billgates.jpg20101204-17402-of0u9o-0

为什么文件名最后会附加20101204-17402-of0u9o-0?用纸夹等打破了一切。以前有人见过吗?对于我的生活,我不知道它在做什么?

由于

更新 回形针:Paperclip on github

a是附件文件

tempfile = Tempfile.new("#{a.filename}", "#{Rails.root.to_s}/tmp/")
tempfile << a.body
tempfile.puts
attachments.build(
    :attachment => File.open(tempfile.path)
)

5 个答案:

答案 0 :(得分:24)

最好确保你的临时文件具有正确的扩展名,这样可以在以下情况下尝试并更改它:

  

file = Tempfile.new(['hello','.jpg'])

     

file.path#=&gt;类似于:“/ tmp / hello2843-8392-92849382--0.jpg”

更多信息:http://apidock.com/ruby/v1_9_3_125/Tempfile/new/class

答案 1 :(得分:4)

Tempfile.new的第一个参数只是一个基本名称。为了确保每个Tempfile都是唯一的,字符将附加到文件的末尾。

答案 2 :(得分:0)

您应该使用Paperclip的API:

tempfiles = []
attachments.each do |a|
  # use Attachment#to_file to get a :filesystem => file, :s3 => tempfile
  tempfiles << a.to_file
end

tempfiles.each do |tf|
  Rails.logger.debug tf.filename
end

答案 3 :(得分:0)

attachment = attachments.build(
  :attachment => File.open(tempfile.path)
)

# change the displayed file name stored in the db record here
attachment.attachment_file_name = a.filename # or whatever else you like

attachment.save!

答案 4 :(得分:0)

我发现处理此问题的最佳方法是在Paperclip属性中指定文件扩展名。例如:

has_attached_file :picture,
  :url => "/system/:hash.jpg",
  :hash_secret => "long_secret_string",
  :storage => :s3,
  :s3_credentials => "#{Rails.root}/config/s3.yml"

请注意::url声明为“.jpg”而不是传统的.:extension

祝你好运!