IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

vérifier type mime en javascript AVANT upload ?


Sujet :

JavaScript

  1. #1
    Invité
    Invité(e)
    Par défaut vérifier type mime en javascript AVANT upload ?
    Bonjour,
    je sais faire :
    AVANT soumission du formulaire (après clic sur "Parcourir") :
    -> vérifier l'extension en javascript ( on vérifie juste le nom du fichier) ;
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var extensions_ok		= 'jpg,jpeg,png,gif';
    var file_name			= $(this).val().toLowerCase(); // nom du fichier (ici en jQuery)
    if(file_name!=''){
    	var file_array 		= file_name.split('.');
    	var file_extension	= file_array[file_array.length-1]; // extension du fichier (dernier élément)
    	if(extensions_ok.indexOf(file_extension)===-1) { 
    		alert('extension PAS ok');
    	} else { 
    		alert('extension OK');
    	}
    }
    APRES soumission du formulaire :
    -> vérifier l'extension en PHP ;
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $file_Extension = strtolower(pathinfo($_FILES['newsPhoto']['name'],PATHINFO_EXTENSION));
    -> vérifier le type MIME en PHP ;
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $finfo = new finfo(FILEINFO_MIME_TYPE, NULL); // Retourne le type mime
    $file_MimeType = $finfo->file($_FILES['newsPhoto']['tmp_name']);
    MAIS AVANT soumission du formulaire (après clic sur "Parcourir") :
    => est-il possible de vérifier le type MIME en javascript ?

    Si oui, comment ?
    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Par défaut
    Bonjour,

    Ceci répond-il à ta demande ?
    http://www.developpez.net/forums/d46...e-mime-upload/

    Cordialement.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour PP(Team),
    non.
    J'avais lu cette discussion avant : elle traite de la vérification en PHP (ce que je sais faire).
    Merci quand même.

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    c'est qu' priori sans activeX ce n'est pas possible coté client ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Invité
    Invité(e)
    Par défaut
    C'est ce que je pensais.

    Je pense qu'une solution serait :
    - de télécharger via Ajax le fichier dans un dossier "temp" ;
    - et donc de vérifier le TYPE MIME en PHP du fichier téléchargé dans ce dossier.
    Mais je n'ai pas envie de télécharger n'importe quoi !!

    Je me trompe ?

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    ben deja si tu regardes l'autre post le fichier est testable pendant l'upload dans $_FILES
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Invité
    Invité(e)
    Par défaut
    Oui, je sais bien.
    C'est déjà ce que je fais APRES soumission du formulaire.

    Ma question porte sur AVANT soumission du formulaire.
    L'objectif étant :
    => affichage d'une "alert" javascript si le fichier n'a pas le bon type MIME.
    => NE PAS uploader le fichier (même dans un dossier "tmp") si l'extension ou le type MIME ne correspondent pas.

    Et donc éviter les fichiers "malveillants", ceux dont l'extension ne correspond pas au type MIME.
    Par exemple : un fichier xxx.exe renommé xxx.jpg, passe la validation de l'Extension.
    Par contre, il ne passera pas la validation du type MIME !

    Suis-je parano ?

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    uploader en ajax = pas possible
    donc a mon avis ce que tu cherches à faire n'est pas raisonnable
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Raisonnable, je confirme, ça l'est probablement pas. En tout cas pas encore.

    Essentiellement, ça consiste à faire une analyse du type de fichier à la mime-magic, du côté du navigateur. Autrement dit, une implémentation de mime-magic dans le navigateur, et vu qu'il n'y en a pas à ma connaissance, la seule manière de le faire, serait de le coder soi-même en JavaScript. Pas complètement infaisable avec une version Java et GWT, mais passablement inefficace.

    Ah, et vu qu'il y a besoin de FileReader pour obtenir le flux d'octets, servant à l'analyse et à l'upload AJAX, ça ne marche que sur les navigateurs qui le gèrent assez bien (Firefox, Chrome, Opéra récents.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    sans doute faisable avec un applet ou un activeX (peut etre avec flash) avec tous les desavangates que cela comporte
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  11. #11
    Invité
    Invité(e)
    Par défaut
    OK, OK.
    Je m'en tiendrais à :
    1/ la vérification de l'extension en javascript (avant soumission du formulaire) ;
    2/ la vérification de l'extension en PHP (traitement de l'upload) ;
    3/ la vérification du type MIME en PHP (traitement de l'upload) ;

    Ca me semble... raisonnable !
    Merci.

  12. #12
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Attention car certain OS n'utilise pas d'extention pour typer les fichiers
    du coup
    "myFile" peut tout aussi bien être un application/ms-excel que text/plain ou tout autre chose.
    il est du ressort du navigateur d'associer un mime/type lors d'un upload

    si donc tu est trop restrictif côté client tu risque de voir ton truc ne plus fonctionner sur certain OS
    IOS par exemple utilise Uniform Type Identifier

    donc si pour un upload de document texte tu refuse les fichier qui ne son pas *.txt les utilisatuer IPAD ne pouront pas faire de upload

    A+JYT

  13. #13
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 115
    Par défaut
    Salut,

    C'est ce que je pensais.

    Je pense qu'une solution serait :
    - de télécharger via Ajax le fichier dans un dossier "temp" ;
    - et donc de vérifier le TYPE MIME en PHP du fichier téléchargé dans ce dossier.
    Mais je n'ai pas envie de télécharger n'importe quoi !!

    Je me trompe ?
    Une alternative à Ajax (puisqu'il ne peut pas envoyer de fichier) est d'utiliser une iframe de taille 0 et invisible.
    Inutile de le mettre dans un fichier temporaire, php le fait pour toi. Et il est possible de communiquer en javascript entre l'iframe et ta page principale pour permettre à php de t'indiquer si tout est OK.

    Bien sûr, quitte à faire ça, autant envoyer toutes les infos d'un coup. La plupart du temps ce sera bon, donc inutile de télécharger deux fois le fichier. Il s'agit simplement de ne pas recharger la page tout de suite.

    Ne t'en fait pas pour le fait de télécharger n'importe quoi. Tu peux télécharger le pire des virus, si le processeur n'exécute pas ses instructions, ça ne risque rien.

  14. #14
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    je vois pas l'interet de passer par un iframe pour faire un upload dans ce cas de figure juste pour tester le type mime ???

    donc en gros tu conseilles de faire un iframe caché pour uploader le fichier pour vérifier le type mime et renvoyer une réponse à la page mère pour ensuite autoriser l'upload à partir du form de la page principale ...

    le principe serait d'ailleurs le même avec ajax si l'upload était possible

    Donc si type mime pas bon on aura eu un upload ...
    si type mime bon on en aura eu deux ...

    il est tout de même lus simple de faire un upload simple et tester le type mime en arrivant su le serveur...
    si ok => move file
    si pas ok =>abandon
    => dans tous les cas de figures 1 seul upload ...

    pas moyen de faire moins ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  15. #15
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 115
    Par défaut
    SpaceFrog : tout à fait d'accord.

    C'est pour cela que j'avais écrit :
    Bien sûr, quitte à faire ça, autant envoyer toutes les infos d'un coup. La plupart du temps ce sera bon, donc inutile de télécharger deux fois le fichier. Il s'agit simplement de ne pas recharger la page tout de suite.

    C'était pour dire qu'il valait mieux traiter le formulaire entier dans l'iframe. Ensuite, s'il y a une erreur, on le signal au visiteur. Autrement, on le dirige vers la page souhaitée.

  16. #16
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par Michaeljackfan Voir le message
    C'était pour dire qu'il valait mieux traiter le formulaire entier dans l'iframe. Ensuite, s'il y a une erreur, on le signal au visiteur. Autrement, on le dirige vers la page souhaitée.
    C'est pas différent d'un AJAX tout bête et classique -_-°.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  17. #17
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Oui enfin en l'occurrence pas besoin d'iframe du tout ... un simple traitement standard du form suffit ;..
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  18. #18
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 115
    Par défaut
    Citation Envoyé par thelvin Voir le message
    C'est pas différent d'un AJAX tout bête et classique -_-°.
    Tu as à 95% raison. À une toute petite différence près : Ajax ne permet pas de gérer les fichiers, tandis qu'une iframe le peut.
    C'est donc un comportement très proche de celui d'Ajax, le support des fichiers en plus. C'est bien ce qu'il voulait, non ?


    Oui enfin en l'occurrence pas besoin d'iframe du tout ... un simple traitement standard du form suffit ;..
    Si le fichier est bon, pas de soucis.
    Mais s'il y a une erreur, utiliser une iframe permet de la signaler immédiatement au visiteur afin qu'il la corrige, plutôt que de recharger la page et lui demander de tout retaper (ou d'utiliser des echo(isset($_POST['x']) ? 'value="'.$_POST['x'].'" : 'y');).

    À moins qu'il y ait une autre façon de tester un fichier sans recharger la page ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajout type mime dans script form upload
    Par jules87 dans le forum Langage
    Réponses: 7
    Dernier message: 19/05/2013, 16h42
  2. Vérifier taille d'un fichier avant upload
    Par libuma dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 05/08/2010, 16h08
  3. Vérifier taille d'un fichier avant upload
    Par Guillaume_Caldera dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 17/11/2009, 09h32
  4. [Upload] vérifier le type mime en upload
    Par SpaceFrog dans le forum Langage
    Réponses: 4
    Dernier message: 20/12/2007, 17h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo