C'est tout à fait possible. Utilisez Javascript.
J'utilise jQuery pour sélectionner l'élément de saisie. Je l'ai configuré avec un onChange
événement.
$("#aFile_upload").on("change", function (e) {
var count=1;
var files = e.currentTarget.files; // puts all files into an array
// call them as such; files[0].size will get you the file size of the 0th file
for (var x in files) {
var filesize = ((files[x].size/1024)/1024).toFixed(4); // MB
if (files[x].name != "item" && typeof files[x].name != "undefined" && filesize <= 10) {
if (count > 1) {
approvedHTML += ", "+files[x].name;
}
else {
approvedHTML += files[x].name;
}
count++;
}
}
$("#approvedFiles").val(approvedHTML);
});
Le code ci-dessus enregistre tous les noms de fichiers que je juge dignes de persister dans la page de soumission avant que la soumission n'ait lieu. J'ajoute les fichiers "approuvés" à la valeur d'un élément d'entrée à l'aide de jQuery, de sorte qu'une soumission de formulaire envoie les noms des fichiers que je veux sauvegarder. Tous les fichiers seront soumis, mais nous devons maintenant les filtrer côté serveur. Je n'ai pas encore écrit de code pour cela, mais laissez libre cours à votre imagination. Je suppose qu'il est possible d'y parvenir en utilisant une boucle for et en faisant correspondre les noms envoyés par le champ de saisie à la balise $_FILES
(PHP Superglobal, désolé je ne connais pas les variables de fichiers ruby) variable.
Ce que je veux dire, c'est qu'il est possible de vérifier les fichiers avant de les soumettre. Je le fais et je le communique à l'utilisateur avant qu'il ne soumette le formulaire, pour lui indiquer ce qu'il télécharge sur mon site. Tout ce qui ne répond pas aux critères n'est pas affiché à l'utilisateur et il doit donc savoir que les fichiers trop volumineux ne seront pas enregistrés. Cela devrait fonctionner sur tous les navigateurs car je n'utilise pas la fonction FormData
objet.