I use this method for renaming the image before the saving:
def rename_avatar
self.avatar.instance_write :file_name, Time.now.to_i.to_s
end
before_post_process :rename_avatar
The image is renamed by the current time, but there's not added the file type, instead of 1334487964.jpg is saved only 1334487964..
What I missing there? I thought :file_name contains only the file name - without the file type
This is the way how I fix my issue:
def rename_avatar
#avatar_file_name - important is the first word - avatar - depends on your column in DB table
extension = File.extname(avatar_file_name).downcase
self.avatar.instance_write :file_name, "#{Time.now.to_i.to_s}#{extension}"
end
Since Paperclip
recommends using interpolates
, this link can help you the best.
https://wyeworks.com/blog/2009/7/13/paperclip-file-rename
I have tried all the previous solutions, it doesn't work with me very well... However, I have created this solution and it works with me on all the styles
attr_accessor :avatar_update_file_name
has_attached_file :avatar,
:styles => {
:medium => "288x288#",
:small => "150x150#",
:thumb => "48x48#"
},
:path => YOUR_PATH + ":style/:basename.:extension",
:url => YOUR_PATH + ":style/:filename",
preserve_files: true
process_in_background :avatar, only_process: [:medium, :small, :thumb, :original]
after_save :rename_avatars
def rename_avatars
if self.avatar_update_file_name == true
new_file_hash = "#{SecureRandom.urlsafe_base64}"
new_file_name = ""
(self.avatar.styles.keys+[:original]).each do |style|
path = avatar.path(style)
if(File.file?(path))
File.chmod(0777, File.dirname(path))
new_file_name = "#{new_file_hash}.#{extension}"
FileUtils.move(path, File.join(File.dirname(path), new_file_name))
end
end
self.avatar_update_file_name = false
self.avatar_file_name = new_file_name
self.save!
end
end
This will loop on your style every time you save your object and you set avatar_update_file_name = true
for one time per object call and it will update your records
for example, your class name is "Avatars"
avatar = new Avatars
#... upload and work with files
avatar.avatar_update_file_name = true
avatar.save!
This will invoke the make the file rename charm!
Note: you can use this "before_save" but the problem is the paperclip might not create this files on the filesystem
Hope this will helps
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With