Définir chemin spécifique Dragonfly pour S3 Datastore
-
13-10-2019 - |
Question
Je dois définir un chemin de structure spécifique pour stocker mes fichiers dans S3.
Exemple:
Au lieu de
'bucket_name / 2010/12/23/127/43/2345 / file.jpg'
besoin
'bucket_name / artistes / elvis_presley / faceshot / 100x100.jpg'
'bucket_name / livres / the_black_cat / couverture / 180x280.jpg'
etc.
Je lis une question similaire, mais ne pas attrappe beaucoup.
Merci.
La solution
UPDATE ---
Il suffit de faire quelque chose comme ça, vous pouvez remplacer comme ci-dessous si vous avez vraiment besoin de quelque chose de spécial. Une manière plus facile est construit en:
some_image.store({:path => "images/some_identifier/the_name.jpg"})
C'est ce que nous sont stockés sur votre seau.
Original Post
Collez ceci dans un fichier, par exemple dragonfly.rb, dans config / initializers
# Monkey patch for Dragonfly's S3 implementation
module Dragonfly
module DataStorage
class S3DataStore
def generate_uid(name)
# Replace this sucker for a better name
"#{Time.now.strftime '%Y/%m/%d/%H/%M/%S'}/#{rand(1000)}/#{name.gsub(/[^\w.]+/, '_')}"
end
end
end
end
Autres conseils
Depuis quelque temps autour Dragonfly 0.9.4, vous pouvez le faire dans le modèle:
class User < ActiveRecord::Base
image_accessor :image do
storage_path{ "users/#{self.user_type}/#{self.login_name" }
end
# ...
end