J'ai lu este y este qui semble suggérer que le type MIME du fichier pourrait être vérifié en utilisant le javascript du côté client. Maintenant, je comprends que la véritable validation doit encore être effectuée côté serveur. Je veux effectuer une vérification côté client pour éviter de gaspiller inutilement les ressources du serveur.
Pour tester si cela peut être fait du côté client, j'ai modifié l'extension d'un fichier de type JPEG
fichier de test vers .png
et choisissez le fichier à télécharger. Avant d'envoyer le fichier, j'interroge l'objet fichier à l'aide d'une console javascript :
document.getElementsByTagName('input')[0].files[0];
Voici ce que j'obtiens sur Chrome 28.0 :
Fichier {webkitRelativePath : "", lastModifiedDate : Tue Oct 16 2012 10:00:00 GMT+0000 (UTC), nom : "test.png", type : "image/png", taille : 500055 }
Il montre le type à être image/png
ce qui semble indiquer que la vérification est effectuée en fonction de l'extension du fichier et non du type MIME. J'ai essayé Firefox 22.0 et il me donne le même résultat. Mais selon la spécification du W3C , Reniflage de MIME doit être mis en œuvre.
Ai-je raison de dire qu'il n'y a aucun moyen de vérifier le type MIME avec javascript pour le moment ? Ou est-ce que quelque chose m'échappe ?
6 votes
I want to perform a client side checking to avoid unnecessary wastage of server resource.
Je ne comprends pas pourquoi vous dites que la validation doit être effectuée du côté du serveur, mais dites ensuite que vous voulez réduire les ressources du serveur. Règle d'or : Ne jamais faire confiance aux données de l'utilisateur . Quel est l'intérêt de vérifier le type MIME du côté client si vous le faites ensuite du côté serveur. Il s'agit certainement d'un "gaspillage inutile de ressources". client ressource" ?10 votes
Fournir une meilleure vérification du type de fichier/un meilleur retour d'information aux utilisateurs côté client est une bonne idée. Cependant, comme vous l'avez indiqué, les navigateurs se basent simplement sur les extensions de fichier pour déterminer la valeur de la propriété
type
propriété pourFile
objets. Le code source de webkit, par exemple, révèle cette vérité. Il est possible d'identifier avec précision les fichiers côté client en recherchant, entre autres, des "octets magiques" dans les fichiers. Je travaille actuellement sur une bibliothèque MIT (dans le peu de temps libre dont je dispose) qui fera exactement cela. Si vous êtes intéressé par mes progrès, jetez un coup d'œil à github.com/rnicholus/determinater .54 votes
@IanClark, le fait est que si le fichier est d'un type non valide, je peux le rejeter du côté client plutôt que de gaspiller la bande passante de téléchargement pour ensuite le rejeter du côté serveur.
0 votes
@RayNicholus, cool mec ! Je le regarderai quand j'aurai le temps. Merci :)
0 votes
Etes-vous sûr que votre fichier de test a toujours le mimetype
image/jpeg
et vous ne l'avez pas modifié en changeant l'extension ?0 votes
Le type Mime n'est pas une solution miracle, c'est juste une hypothèse. Les fichiers binaires eux-mêmes ne portent pas cette propriété, il n'y a donc aucun moyen de l'obtenir de manière transparente côté client. Il est défini par les serveurs lorsqu'ils envoient des données aux clients, mais même dans ce cas, il est souvent deviné par l'extension du fichier, ou explicitement défini par les développeurs backend qui savent quel type de contenu ils envoient. fr.wikipedia.org/wiki/Mime_type
1 votes
@QuestionOverflow Un peu tard, mais j'ai ajouté une solution complète et une démo vivante et fonctionnelle dans ma réponse. Profitez-en.