2010-12-05 73 views
13

我有以下幾點:Rails 3 - Tempfile Path?

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在末尾附加?這是用紙夾等打破了一切。以前有人看過這個嗎?對於我的生活,我不知道它在做什麼?

感謝

UPDATE 回形針:Paperclip on github

一個是附件文件

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

爲什麼不直接使用File.new而非Tempfile.new? – 2010-12-05 03:55:12

+0

好問題。它需要Heroku友好,他們的文檔說使用tempfile? – AnApprentice 2010-12-05 03:56:50

+0

不會File.New中斷如果有衝突? – AnApprentice 2010-12-05 04:08:31

回答

4

爲Tempfile.new第一個參數是隻是一個基本名稱。爲了確保每個Tempfile都是唯一的,這些字符會附加到文件的末尾。

+0

謝謝約翰,但是這打破了Paperclip,然後做:附件=> File.open(tempfile.path),我怎麼能發送這個臨時文件到回形針沒有所有的隨機性附加到文件名?謝謝 – AnApprentice 2010-12-05 03:32:49

0

您應該使用回形針的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 
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! 
0

我找到對付它的最好方法是指定在回形針屬性的文件擴展名。例如:

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

祝你好運!