Attachment_fu en batch avec rubyzip

Publié le 09/03/08 par Jean-Baptiste Escoyez | 0 commentaires

J’adore utiliser attachment fu pour gérer mes images. Cependant, je déteste (ainsi que mes clients) charger les images une à une dans mes galleries. Une solution simple et efficace est d’uploader toutes les images compressées dans un fichier zip.

Premièrement, il faut installer rubyzip :

gem install rubyzip

Pas trop difficile jusque là. Vous aurez évidemment besoin de attachment_fu.

script/plugin install http://svn.techno-weenie.net/projects/plugins/attachment_fu/

ou

piston import install http://svn.techno-weenie.net/projects/plugins/attachment_fu/ vendor/

Il ne vous reste plus qu’à ajouter un petit bout de code dans votre contrôlleur:


class AssetsController < ApplicationController
  def create

    Zip::ZipFile.foreach(params[:asset][:uploaded_data].path) do |zip_entry|
      if zip_entry.file?
        ActionController::UploadedTempfile.open(zip_entry.to_s) do |temp|
          zip_entry.extract(temp.path){true}
          temp.original_path = zip_entry.to_s
          temp.content_type = 'image/jpeg' # Juste pour que ça passe dans 
                                           # attachment_fu
          @training_slot.assets.create!(:uploaded_data=>temp)
        end
      end
    end

    flash[:notice] = 'Les images ont été ajoutées correctement.'
    redirect_to ...

  rescue ActiveRecord::ActiveRecordError => e
    flash[:notice] = 'Une erreur s\'est produite : ' + e
    redirect_to ...
  end

Et n’oublliez pas d’importer la librairie dans environnement.rb

require 'zip/zip'

Voilà, c’est tout. En espérant que ça puisse vous éviter le pénible remplissage de galleries. :)

0 Commentaires

Ajouter un commentaire

Vous devez être identifié pour poster un commentaire. Identifiez-vous, ou inscrivez-vous si ce n'est déjà fait.