【问题标题】:Paperclip set :extension to mp3 if no extensionPaperclip set :extension to mp3 if no extension
【发布时间】:2011-12-05 20:25:09
【问题描述】:

我正在开发一个使用回形针将音频文件保存到 Amazon S3 的 rails 3 应用程序。我正在保存许多从 url 传输的 mp3 文件,但它们是在没有扩展名的情况下传输的。我知道这些文件是 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

【问题讨论】:

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


    【解决方案1】:

    这是一个猜测,但试试这个:..

    变化:

    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 matchgsub 组合。

    【讨论】:

      【解决方案2】:

      您的文件未保存为 .mp3 的原因是您使用的是 open-uri。将保存代码更改为:

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

      这应该可以解决您的问题。

      发生这种情况的原因是因为 open-uri 创建了一个没有扩展名的临时文件,并且该文件被提供给 Paperclip。

      Original Article

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-27
        • 1970-01-01
        • 2022-01-19
        • 2022-12-02
        • 2013-07-26
        • 2018-11-11
        • 2022-12-01
        • 2022-12-19
        相关资源
        最近更新 更多