Guest User

Untitled

a guest
Jul 23rd, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.73 KB | None | 0 0
  1. has_attached_file :image, :styles => { ...... }
  2.  
  3. (record.image.styles.keys+[:original]).each do |style|
  4. path = record.image.path(style)
  5. FileUtils.move(path, File.join(File.dirname(path), new_file_name))
  6. end
  7.  
  8. record.image_file_name = new_file_name
  9. record.save
  10.  
  11. params[:upload][:md5] = Digest::MD5.file(file.path).hexdigest
  12.  
  13. Paperclip.interpolates :md5 do|attachment,style|
  14. attachment.instance.md5
  15. end
  16.  
  17. validates_attachment_presence :upload
  18. has_attached_file :upload,
  19. :path => ':rails_root/public/files/:md5.:extension',
  20. :url => '/files/:md5.:extension'
  21.  
  22. (record.image.styles.keys+[:original]).each do |style|
  23. AWS::S3::S3Object.move_to record.image.path(style), new_file_path, record.image.bucket_name
  24. end
  25.  
  26. record.update_attribute(:image_file_name, new_file_name)
  27.  
  28. class User < ActiveRecord::Base
  29. after_update :rename_attached_files_if_needed
  30.  
  31. has_attached_file :avatar_image,
  32. :storage => :s3,
  33. :s3_credentials => "#{Rails.root}/config/s3.yml",
  34. :path => "/users/:id/:style/:slug.:extension",
  35. :default_url => "/images/users_default.gif",
  36. :styles => { mini: "50x50>", normal: "100x100>", bigger: "150x150>" }
  37.  
  38. def slug
  39. return name.parameterize if name
  40. "unknown"
  41. end
  42.  
  43.  
  44. def rename_attached_files_if_needed
  45. return if !name_changed? || avatar_image_updated_at_changed?
  46. (avatar_image.styles.keys+[:original]).each do |style|
  47. extension = Paperclip::Interpolations.extension(self.avatar_image, style)
  48. old_path = "users/#{id}/#{style}/#{name_was.parameterize}#{extension}"
  49. new_path = "users/#{id}/#{style}/#{name.parameterize}#{extension}"
  50. avatar_image.s3_bucket.objects[old_path].move_to new_path, acl: :public_read
  51. end
  52. end
  53. end
  54.  
  55. def rename(key, new_name)
  56. file_name = (key.to_s+"_file_name").to_sym
  57. old_name = self.send(file_name)
  58. (self.send(key).styles.keys+[:original]).each do |style|
  59. path = self.send(key).path(style)
  60. self[file_name] = new_name
  61. new_path = self.send(key).path(style)
  62. new_path[0] = ""
  63. self[file_name] = old_name
  64. old_obj = self.send(key).s3_object(style.to_sym)
  65. new_obj = old_obj.move_to(new_path)
  66. end
  67. self.update_attribute(file_name, new_name)
  68. end
  69.  
  70. styles = file.styles.keys+[:original]
  71. old_style2key = Hash[ styles.collect{|s| [s,file.path(s).sub(%r{A/},'')]} ]
  72. self.file_file_name = new_filename
  73. new_style2key = Hash[ styles.collect{|s| [s,file.path(s).sub(%r{A/},'')]} ]
  74.  
  75. styles.each do |style|
  76. raise "same key" if old_style2key[style] == new_style2key[style]
  77. file.s3_bucket.objects[old_style2key[style]].copy_to(new_style2key[style])
  78. end
  79.  
  80. save!
  81.  
  82. styles.each do |style|
  83. file.s3_bucket.objects[old_style2key[style]].delete
  84. end
  85.  
  86. Paperclip::Attachment.default_options.update({
  87. # :url=>"/system/:class/:attachment/:id_partition/:style/:filename"
  88. :url=>"/system/:class/:attachment/:style/:fingerprint.:extension"
  89. })
  90.  
  91. :path=>":rails_root/public:url"
  92.  
  93. $ rails c --sandbox
  94. > Paperclip::Attachment.default_options
  95. ..
  96. > s = User.create(:avatar => File.open('/foo/bar.jpg', 'rb'))
  97. ..
  98. > s.avatar.path
  99. => "/home/groovy_user/rails_projectes/funky_app/public/system/users/avatars/original/49332b697a83d53d3f3b5bebce7548ea.jpg"
  100. > s.avatar.url
  101. => "/system/users/avatars/original/49332b697a83d53d3f3b5bebce7548ea.jpg?1387099146"
  102.  
  103. class RenamePhotoColumnFromUsers < ActiveRecord::Migration
  104. def up
  105. add_attachment :users, :photo
  106.  
  107. # Add `avatar` method (from Paperclip) temporarily, because it has been deleted from the model
  108. User.has_attached_file :avatar, styles: { medium: '300x300#', thumb: '100x100#' }
  109. User.validates_attachment_content_type :avatar, content_type: %r{Aimage/.*Z}
  110.  
  111. # Copy `avatar` attachment to `photo` in S3, then delete `avatar`
  112. User.where.not(avatar_file_name: nil).each do |user|
  113. say "Updating #{user.email}..."
  114.  
  115. user.update photo: user.avatar
  116. user.update avatar: nil
  117. end
  118.  
  119. remove_attachment :users, :avatar
  120. end
  121.  
  122. def down
  123. raise ActiveRecord::IrreversibleMigration
  124. end
  125. end
  126.  
  127. def sanitize_filename(filename)
  128. fn = filename.split /(?<=.).(?=[^.])(?!.*.[^.])/m
  129. fn[0] = fn[0].parameterize
  130. return fn.join '.'
  131. end
  132.  
  133. include ApplicationHelper
  134.  
  135. Paperclip::Attachment.default_options.update({
  136. :path => ":rails_root/public/system/:class/:attachment/:id/:style/:parameterize_file_name",
  137. :url => "/system/:class/:attachment/:id/:style/:parameterize_file_name",
  138. })
  139.  
  140. Paperclip.interpolates :parameterize_file_name do |attachment, style|
  141. sanitize_filename(attachment.original_filename)
  142. end
  143.  
  144. attr_accessor :avatar_update_file_name
  145. has_attached_file :avatar,
  146. :styles => {
  147. :medium => "288x288#",
  148. :small => "150x150#",
  149. :thumb => "48x48#"
  150. },
  151. :path => YOUR_PATH + ":style/:basename.:extension",
  152. :url => YOUR_PATH + ":style/:filename",
  153. preserve_files: true
  154.  
  155.  
  156. process_in_background :avatar, only_process: [:medium, :small, :thumb, :original]
  157. after_save :rename_avatars
  158.  
  159. def rename_avatars
  160. if self.avatar_update_file_name == true
  161. new_file_hash = "#{SecureRandom.urlsafe_base64}"
  162. new_file_name = ""
  163. (self.avatar.styles.keys+[:original]).each do |style|
  164. path = avatar.path(style)
  165. if(File.file?(path))
  166. File.chmod(0777, File.dirname(path))
  167. new_file_name = "#{new_file_hash}.#{extension}"
  168. FileUtils.move(path, File.join(File.dirname(path), new_file_name))
  169. end
  170. end
  171. self.avatar_update_file_name = false
  172. self.avatar_file_name = new_file_name
  173. self.save!
  174. end
  175. end
  176.  
  177. avatar = new Avatars
  178. #... upload and work with files
  179. avatar.avatar_update_file_name = true
  180. avatar.save!
Add Comment
Please, Sign In to add comment