Набор скрепок: расширение до mp3, если нет расширения - PullRequest
1 голос
/ 06 декабря 2011

Я работаю над приложением rails 3, которое использует скрепку для сохранения аудиофайлов в Amazon S3.Я сохраняю множество mp3-файлов, которые передаются с URL-адреса, но они передаются без расширения.Я знаю, что эти файлы - mp3-файлы, но в скрепке они не имеют расширения.Как установить расширение mp3, если расширение не предусмотрено?

    has_attached_file :audio,
    :storage => :s3,
    :s3_credentials => "#{Rails.root}/config/aws.yml",
    :hash_secret => 'secret',
    :hash_data => ':class/:attachment/:id',
    :path           => ':rails_env/:class/:id/:style/:hash.:extension'

def transfer_to_s3
    io = open(URI.parse(recording_url + '.mp3'))        
    self.audio = io
    self.save
end

Ответы [ 2 ]

0 голосов
/ 06 марта 2014

Причина, по которой ваши файлы не сохраняются в формате .mp3, заключается в том, что вы используете open-uri .Измените код сохранения на:

self.audio = URI.parse(recording_url)
self.save

. Это должно решить вашу проблему.

Причина, по которой это происходит, заключается в том, что open-uri создает временный файл без расширения и предоставляется Paperclip.

Оригинальная статья

Надеюсь, это поможет.

0 голосов
/ 06 декабря 2011

Это предположение, но попробуйте: ..

Изменение:

has_attached_file :photo, :url => "/:class/:attachment/:id/:style_:basename.:extension"

Кому:

has_attached_file :photo, :url => lambda { |attachment| { :url => (attachment.match(/mp3/).nil? ? "/:class/:attachment/:id/:style_:basename.mp3" : "/:class/:attachment/:id/:style_:basename.:extension") }

Просто дикая идея. Там может быть какое-то синтаксическое повреждение, но, возможно, оно подтолкнет вас в правильном направлении. Извините: D

Вы также можете сделать комбо after_save match и gsub.

...