使用 Paperclip 根据内容类型更改上传文件的路径

Change path of uploaded file based upon content type using Paperclip

我正在使用 Paperclip 处理我的应用程序的文件上传。我需要能够根据文件的 content-type 更改文件的路径。当我尝试使用 lambda 执行此操作时,我收到 stack level too deep 错误。

has_attached_file :file, :storage => :s3,
                          path: lambda { |a| a.instance.determine_path_for_content },
                          :s3_credentials => { 
                          :bucket => 'myBucket', 
                          :access_key_id => ENV['AWS_ACCESS_KEY'],
                          :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
                          }

def determine_path_for_content
    if file.instance.file_content_type == "video/mp4"
        "/:name/:event:event_id/:basename_time_:start_mp4_at_end_time:fingerprint.:extension"
    else
        "/:name/:event:event_id/:basename_:fingerprint.:extension"
    end
end

试试这个:

has_attached_file :file, :storage => :s3,
                          path: lambda { |a| a.class.determine_path_for_content(file.instance.file_content_type) },
                          :s3_credentials => { 
                          :bucket => 'myBucket', 
                          :access_key_id => ENV['AWS_ACCESS_KEY'],
                          :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
                          }

def self.determine_path_for_content(content_type)
    if content_type == "video/mp4"
        "/:name/:event:event_id/:basename_time_:start_mp4_at_end_time:fingerprint.:extension"
    else
        "/:name/:event:event_id/:basename_:fingerprint.:extension"
    end
end

在我看来,最好将其作为 class 方法,这样可以避免此处的递归。