Rails 3 - путь к временному файлу? - PullRequest
16 голосов
/ 05 декабря 2010

У меня есть следующее:

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 в конце?Это ломает все с помощью скрепки и т.д. Кто-нибудь видел это раньше?Для жизни я понятия не имею, что делает это?

Спасибо

ОБНОВЛЕНИЕ Скрепка: Скрепка на github

это файл вложения

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

Ответы [ 5 ]

24 голосов
/ 16 августа 2012

Лучше всего убедитесь, что ваш временный файл имеет правильное расширение, поэтому вы можете попытаться изменить его после:

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

file.path # => что-то вроде: "/tmp/hello2843-8392-92849382--0.jpg"

больше здесь: http://apidock.com/ruby/v1_9_3_125/Tempfile/new/class

4 голосов
/ 05 декабря 2010

Первый аргумент для Tempfile.new - это просто базовое имя.Чтобы убедиться, что каждый Tempfile уникален, символы добавляются в конец файла.

0 голосов
/ 28 мая 2012

Лучший способ, который я нашел, - это указать расширение файла в атрибуте 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.

Удачи!

0 голосов
/ 05 декабря 2010
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 голосов
/ 05 декабря 2010

Для этого вы должны использовать API Paperclip:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...