8
votes

Comment puis-je rendre CarrierWave pas enregistrer le fichier d'origine après le traitement des versions?

J'utilise CarrierWave pour mes téléchargements de fichiers dans Rails 3.1, et je cherche un moyen d'économiser de l'espace serveur. Beaucoup de photos étant téléchargées sont supérieures à 20 Mo. Ainsi, après les traiter jusqu'à 1024 x 1024, je voudrais supprimer l'original. Y a-t-il un moyen facile de le faire dans la classe de l'uploader?

merci, --Mark


1 commentaires

Ma solution a-t-elle fonctionné pour vous?


5 Réponses :


4
votes

Vous pouvez définir un rappel After_save dans votre modèle et supprimer la photo ..

Je ne connais pas votre modèle, mais quelque chose comme ça peut fonctionner si vous le personnifiez: P>

class User << ActiveRecord::Base

  after_create :convert_file
  after_create :delete_original_file

  def convert_file
    # do the things you have to do
  end 

  def delete_original_file
    File.delete self.original_file_path if File.exists? self.original_file_path
  end
end


2 commentaires

Cela a-t-il fonctionné pour vous? Si oui, serait bien si vous marquez ma réponse, demandez correct.


Vous devez demander à Mark, car c'est le propriétaire de la question, pas moi, désolé.



1
votes
class FileUploader < CarrierWave::Uploader::Base

  after :store, :delete_original_file

  def delete_original_file(new_file)
    File.delete path if version_name.blank?
  end

  include CarrierWave::RMagick

  storage :file
  .
  . # other configurations

end

0 commentaires

23
votes

J'avais deux versions et j'ai réalisé que je n'avais pas besoin de l'original

donc au lieu d'avoir xxx

i supprimé: normal et ajouté ceci xxx

MAINTENANT L'original est enregistré en taille dont j'ai besoin et je n'ai pas une troisième image inutilisée sur le serveur


2 commentaires

Impressionnant, je pense que c'est une excellente solution pour simplement faire un processus en dehors de n'importe quel bloc de version afin de ne pas enregistrer la version originale du tout si c'est vraiment grand. Merci


J'aimerais ajouter que si vous voulez toujours inclure "normal _" dans le nom de fichier téléchargé, comme cela se produirait dans une version version , vous pouvez affecter explicitement. Un nom de version au téléchargeur de base en utilisant version_nomètres <<: moyen .



7
votes

Tout le monde! La solution sélectionnée ne fonctionne pas pour moi. Ma solution: xxx


1 commentaires

Merci, vous méritez un cookie!



0
votes

C'est un peu hack, mais a un avantage de performance

my_uploader.send :store_versions!, open(my_file)


0 commentaires