L'entrée de fichier attribut 'accepter' - est-ce utile?
-
05-07-2019 - |
Question
La mise en œuvre d'un téléchargement de fichier sous html est assez simple, mais je viens de remarquer qu'il existe un attribut "accept" qui peut être ajouté à la balise <input type="file" ...>
.
Cet attribut est-il utile pour limiter le téléchargement de fichiers aux images, etc.? Quelle est la meilleure façon de l'utiliser?
Sinon, existe-t-il un moyen de limiter les types de fichier, de préférence dans la boîte de dialogue de fichier, pour une balise d'entrée de fichier html?
La solution
L'attribut accept
est incroyablement utile. Pour les navigateurs, il est bon de n’afficher que les fichiers autorisés pour le input
actuel. Bien qu’elle puisse généralement être remplacée par les utilisateurs, elle permet par défaut de limiter les résultats. Ainsi, ils peuvent obtenir exactement ce qu’ils recherchent sans avoir à parcourir une centaine de types de fichiers différents.
Utilisation
Remarque: Ces exemples ont été écrits en fonction de la spécification en vigueur et risquent de ne pas fonctionner dans tous les navigateurs (ou dans tous les). La spécification pourrait également changer à l'avenir, ce qui pourrait casser ces exemples.
h1 { font-size: 1em; margin:1em 0; }
h1 ~ h1 { border-top: 1px solid #ccc; padding-top: 1em; }
<h1>Match all image files (image/*)</h1>
<p><label>image/* <input type="file" accept="image/*"></label></p>
<h1>Match all video files (video/*)</h1>
<p><label>video/* <input type="file" accept="video/*"></label></p>
<h1>Match all audio files (audio/*)</h1>
<p><label>audio/* <input type="file" accept="audio/*"></label></p>
<h1>Match all image files (image/*) and files with the extension ".someext"</h1>
<p><label>.someext,image/* <input type="file" accept=".someext,image/*"></label></p>
<h1>Match all image files (image/*) and video files (video/*)</h1>
<p><label>image/*,video/* <input type="file" accept="image/*,video/*"></label></p>
À partir de la spécification HTML ( source )
L'attribut
audio/*
peut être spécifié pour fournir aux agents d'utilisateur une indice des types de fichiers acceptés.Si spécifié, l'attribut doit être composé d'un set des jetons séparés par des virgules , dont chacun doit être un ASCII insensible à la casse correspond à l'un des éléments suivants:
La chaîne
video/*
- Indique que les fichiers sonores sont acceptés.
La chaîne
image/*
- Indique que les fichiers vidéo sont acceptés.
La chaîne <=>
- Indique que les fichiers d'image sont acceptés.
A type MIME valide sans paramètre
- Indique que les fichiers du type spécifié sont acceptés.
Une chaîne dont le premier caractère est un caractère U + 002E FULL STOP (.)
- Indique que les fichiers portant l'extension spécifiée sont acceptés.
Autres conseils
Oui, il est extrêmement utile dans les navigateurs qui le prennent en charge, mais le & "; limitation &"; est un moyen pratique pour les utilisateurs (afin de ne pas être submergé de fichiers non pertinents) plutôt que comme un moyen de les empêcher de télécharger des fichiers que vous ne souhaitez pas télécharger.
Il est pris en charge dans
- Chrome 16 +
- Safari 6 +
- Firefox 9 +
- IE 10 +
- Opera 11 +
Voici une liste de types de contenu que vous pouvez utiliser avec, suivi des extensions de fichier correspondantes (bien que vous puissiez utiliser n'importe quelle extension de fichier):
application/envoy evy
application/fractals fif
application/futuresplash spl
application/hta hta
application/internet-property-stream acx
application/mac-binhex40 hqx
application/msword doc
application/msword dot
application/octet-stream *
application/octet-stream bin
application/octet-stream class
application/octet-stream dms
application/octet-stream exe
application/octet-stream lha
application/octet-stream lzh
application/oda oda
application/olescript axs
application/pdf pdf
application/pics-rules prf
application/pkcs10 p10
application/pkix-crl crl
application/postscript ai
application/postscript eps
application/postscript ps
application/rtf rtf
application/set-payment-initiation setpay
application/set-registration-initiation setreg
application/vnd.ms-excel xla
application/vnd.ms-excel xlc
application/vnd.ms-excel xlm
application/vnd.ms-excel xls
application/vnd.ms-excel xlt
application/vnd.ms-excel xlw
application/vnd.ms-outlook msg
application/vnd.ms-pkicertstore sst
application/vnd.ms-pkiseccat cat
application/vnd.ms-pkistl stl
application/vnd.ms-powerpoint pot
application/vnd.ms-powerpoint pps
application/vnd.ms-powerpoint ppt
application/vnd.ms-project mpp
application/vnd.ms-works wcm
application/vnd.ms-works wdb
application/vnd.ms-works wks
application/vnd.ms-works wps
application/winhlp hlp
application/x-bcpio bcpio
application/x-cdf cdf
application/x-compress z
application/x-compressed tgz
application/x-cpio cpio
application/x-csh csh
application/x-director dcr
application/x-director dir
application/x-director dxr
application/x-dvi dvi
application/x-gtar gtar
application/x-gzip gz
application/x-hdf hdf
application/x-internet-signup ins
application/x-internet-signup isp
application/x-iphone iii
application/x-javascript js
application/x-latex latex
application/x-msaccess mdb
application/x-mscardfile crd
application/x-msclip clp
application/x-msdownload dll
application/x-msmediaview m13
application/x-msmediaview m14
application/x-msmediaview mvb
application/x-msmetafile wmf
application/x-msmoney mny
application/x-mspublisher pub
application/x-msschedule scd
application/x-msterminal trm
application/x-mswrite wri
application/x-netcdf cdf
application/x-netcdf nc
application/x-perfmon pma
application/x-perfmon pmc
application/x-perfmon pml
application/x-perfmon pmr
application/x-perfmon pmw
application/x-pkcs12 p12
application/x-pkcs12 pfx
application/x-pkcs7-certificates p7b
application/x-pkcs7-certificates spc
application/x-pkcs7-certreqresp p7r
application/x-pkcs7-mime p7c
application/x-pkcs7-mime p7m
application/x-pkcs7-signature p7s
application/x-sh sh
application/x-shar shar
application/x-shockwave-flash swf
application/x-stuffit sit
application/x-sv4cpio sv4cpio
application/x-sv4crc sv4crc
application/x-tar tar
application/x-tcl tcl
application/x-tex tex
application/x-texinfo texi
application/x-texinfo texinfo
application/x-troff roff
application/x-troff t
application/x-troff tr
application/x-troff-man man
application/x-troff-me me
application/x-troff-ms ms
application/x-ustar ustar
application/x-wais-source src
application/x-x509-ca-cert cer
application/x-x509-ca-cert crt
application/x-x509-ca-cert der
application/ynd.ms-pkipko pko
application/zip zip
audio/basic au
audio/basic snd
audio/mid mid
audio/mid rmi
audio/mpeg mp3
audio/x-aiff aif
audio/x-aiff aifc
audio/x-aiff aiff
audio/x-mpegurl m3u
audio/x-pn-realaudio ra
audio/x-pn-realaudio ram
audio/x-wav wav
image/bmp bmp
image/cis-cod cod
image/gif gif
image/ief ief
image/jpeg jpe
image/jpeg jpeg
image/jpeg jpg
image/pipeg jfif
image/svg+xml svg
image/tiff tif
image/tiff tiff
image/x-cmu-raster ras
image/x-cmx cmx
image/x-icon ico
image/x-portable-anymap pnm
image/x-portable-bitmap pbm
image/x-portable-graymap pgm
image/x-portable-pixmap ppm
image/x-rgb rgb
image/x-xbitmap xbm
image/x-xpixmap xpm
image/x-xwindowdump xwd
message/rfc822 mht
message/rfc822 mhtml
message/rfc822 nws
text/css css
text/h323 323
text/html htm
text/html html
text/html stm
text/iuls uls
text/plain bas
text/plain c
text/plain h
text/plain txt
text/richtext rtx
text/scriptlet sct
text/tab-separated-values tsv
text/webviewhtml htt
text/x-component htc
text/x-setext etx
text/x-vcard vcf
video/mpeg mp2
video/mpeg mpa
video/mpeg mpe
video/mpeg mpeg
video/mpeg mpg
video/mpeg mpv2
video/quicktime mov
video/quicktime qt
video/x-la-asf lsf
video/x-la-asf lsx
video/x-ms-asf asf
video/x-ms-asf asr
video/x-ms-asf asx
video/x-msvideo avi
video/x-sgi-movie movie
x-world/x-vrml flr
x-world/x-vrml vrml
x-world/x-vrml wrl
x-world/x-vrml wrz
x-world/x-vrml xaf
x-world/x-vrml xof
L’attribut Accepter a été introduit dans la RFC 1867 , dans le but d'activer le filtrage de type de fichier. sur le type MIME pour le contrôle de sélection de fichier. Mais à partir de 2008, la plupart des navigateurs, sinon tous, n'utilisent pas cet attribut. À l'aide de scripts côté client, vous pouvez effectuer une sorte de validation basée sur extension pour soumettre des données de type correct (extension).
D'autres solutions de téléchargement de fichiers avancé nécessitent des animations Flash telles que des SWFUpload ou des applets Java telles que JUpload .
En 2015, le seul moyen que j'ai trouvé de le faire fonctionner à la fois pour Chrome et Firefox consiste à définir toutes les extensions possibles que vous souhaitez prendre en charge. , y compris les variantes:
accept=".jpeg, .jpg, .jpe, .jfif, .jif"
Problème avec FireFox : l'utilisation du image/jpeg
type mime FireFox ne montrera que les .jpg
fichiers, ce qui est très étrange, comme si le commun .jpeg
n'était pas correct ...
Quoi que vous fassiez, essayez d’essayer des fichiers ayant de nombreuses extensions différentes. Peut-être que cela dépend même du système d'exploitation ...
Je suppose que accept
ne respecte pas la casse, mais peut-être pas dans tous les navigateurs.
Voici les documents MDN concernant l'acceptation. :
accepter Si la valeur de l'attribut type est file, cet attribut indiquera les types de fichiers acceptés par le serveur, sinon sera ignoré. La valeur doit être une liste de noms uniques séparés par des virgules. spécificateurs de type de contenu:
A file extension starting with the STOP character (U+002E). (e.g. .jpg, .png, .doc). A valid MIME type with no extensions. audio/* representing sound files. HTML5 video/* representing video files. HTML5 image/* representing image files. HTML5
Il est pris en charge par Chrome. Il n'est pas censé être utilisé pour la validation, mais pour l'indication de type du système d'exploitation. Si vous avez un accept="image/jpeg"
attribut dans un fichier téléchargé, le système d'exploitation ne peut afficher que les fichiers du type suggéré.
Cela fait quelques années et Chrome utilise au moins cet attribut. Cet attribut est très utile du point de vue de la convivialité, car il filtrera les fichiers inutiles pour l’utilisateur, ce qui simplifiera son expérience. Cependant, l'utilisateur peut toujours sélectionner & Tous les fichiers & Quot; à partir du type (ou sinon contournez le filtre), vous devriez donc toujours valider le fichier où il est réellement utilisé; Si vous l'utilisez sur le serveur, validez-le avant de l'utiliser. L'utilisateur peut toujours ignorer les scripts côté client.
Si le navigateur utilise cet attribut, il ne s'agit que d'une aide pour l'utilisateur. Il ne téléchargera donc pas un fichier de plusieurs mégaoctets pour le voir rejeté par le serveur ...
Idem pour la balise <input type="hidden" name="MAX_FILE_SIZE" value="100000">
: si le navigateur l’utilise, il n’enverra pas le fichier mais une erreur entraînant une erreur UPLOAD_ERR_FORM_SIZE
(2) en PHP (vous ne savez pas comment il est géré dans d’autres langues).
Notez que ce sont des aides pour l'utilisateur . Bien entendu, le serveur doit toujours vérifier le type et la taille du fichier à sa fin: il est facile de modifier ces valeurs côté client.
En 2008, cela n’était pas important à cause du manque d’OS mobiles, mais c’est maintenant une chose assez importante.
Lorsque vous définissez les types de mime acceptés, une boîte de dialogue système avec les applications pouvant lui fournir le contenu de mime accepté par l'entrée de fichier est donnée à l'utilisateur Android. et souvent stressant.
Il est important de noter que certains navigateurs mobiles (basés sur la version Android de Chrome 36 et Chrome Beta 37) ne prennent pas en charge le filtrage d'applications sur les extensions et les types MIME multiples.