使用带有Paperclip的rails,我可以使用以下命令在before_create期间获取文件名:
extension = File.extname(photo_file_name).downcase
我如何得到JUST文件名..现在我有photo_file_name提供整个文件,titlename.pdf
我只需要没有.pdf的titlename
由于
使用代码进行更新:
photo.rb:
before_create :obfuscate_file_name
#Paperclip for photo
has_attached_file :photo,
......
private
def obfuscate_file_name
extension = File.extname(photo_file_name).downcase
fileNameOnly = File.basename(photo_file_name).downcase
self.photo.instance_write(:file_name, "#{fileNameOnly}_#{ActiveSupport::SecureRandom.hex(32)}#{extension}")
end
答案 0 :(得分:23)
将File.basename
与可选的suffix
参数一起使用,如下所示:
file_name = File.basename(photo_file_name, File.extname(photo_file_name));
在我的机器上运行:
答案 1 :(得分:22)
Paperclip附件具有' original_filename'方法。
答案 2 :(得分:8)
user.logo.original_filename
=> 'test.jpg'
答案 3 :(得分:0)
另一个选项设置为默认值,适用于所有上传。
此示例将名称文件更改为' name default'对于网络,例如:test áé.jpg
到test_ae_www.foo.com.jpg
<强>助手/ application_helper.rb 强>
def sanitize_filename(filename)
fn = filename.split /(?<=.)\.(?=[^.])(?!.*\.[^.])/m
fn[0] = fn[0].parameterize
return fn.join '.'
end
创建 config / initializers / paperclip_defaults.rb
include ApplicationHelper
Paperclip::Attachment.default_options.update({
:path => ":rails_root/public/system/:class/:attachment/:id/:style/:parameterize_file_name",
:url => "/system/:class/:attachment/:id/:style/:parameterize_file_name",
})
Paperclip.interpolates :parameterize_file_name do |attachment, style|
"#{sanitize_filename(attachment.original_filename)}_www.foo.com"
end
在放入此代码后需要重启
我希望它有所帮助! ;)