Lire un fichier CSV récupéré depuis un formulaire, 2ème partie

27 juillet 2007, 09:55

La semaine dernière, j’avais expliqué comment importer un fichier CSV uploadé depuis un formulaire d’une page web avec Ruby on Rails.
Le code fonctionne très bien, cependant on aimerait vérifier que l’utilisateur spécifie bien un fichier CSV avant d’effectuer l’import. Pour cela j’avais fait ce test:

unless params[:csv][:file] == "" || params[:csv][:file].nil?
  # lire le fichier CSV à partir d'ici
end

Je développe sous Opera en général et lorsque je dois faire des vérifications de mes requêtes Ajax ou de mon code CSS j’utilise Firefox (comme tout le monde). Et ce n’est que lorsque j’ai effectué les tests de validation sous Internet Explorer que je me suis rendu compte de la singularité du traitement des formulaires de fichiers sous Opera.

En effet celui-ci retourne une chaîne vide lorsqu’aucun fichier n’est spécifié, alors que pour IE et Firefox, il ne s’agit pas d’une chaîne vide. On obtient en Ruby un StringIO qui une fois lu nous retourne une chaîne vide si aucun fichier n’a été spécifié. J’effectue donc un test supplémentaire:

unless params[:csv][:file] == "" || params[:csv][:file].nil?
  csv_file = params[:csv][:file].read
  unless csv_file == ""
    # lire le fichier CSV à partir d'ici
    # cette fois on utilise csv_file au lieu de params[:csv][:file]
  end
end

Voilà ça me semblait important de signaler la différence de comportement selon les navigateurs :)

mots-clés: , , ,

Nom
Adresse email
http://
Message