使用 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 方法,这样可以避免此处的递归。
我正在使用 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 方法,这样可以避免此处的递归。