Attributo 'accetta' di input del file - è utile?
-
05-07-2019 - |
Domanda
L'implementazione di un caricamento di file in html è abbastanza semplice, ma ho appena notato che esiste un attributo 'accetta' che può essere aggiunto al tag <input type="file" ...>
.
Questo attributo è utile per limitare il caricamento di file su immagini, ecc.? Qual è il modo migliore per usarlo?
In alternativa, esiste un modo per limitare i tipi di file, preferibilmente nella finestra di dialogo del file, per un tag di input del file html?
Soluzione
L'attributo accept
è incredibilmente utile. È un suggerimento per i browser mostrare solo i file consentiti per l'attuale input
. Mentre in genere può essere sovrascritto dagli utenti, aiuta a restringere i risultati per impostazione predefinita, in modo che possano ottenere esattamente quello che stanno cercando senza dover scorrere tra centinaia di tipi di file diversi.
Uso
Nota : Questi esempi sono stati scritti in base alle specifiche correnti e potrebbero non funzionare effettivamente in tutti (o in nessuno) browser. Le specifiche potrebbero anche cambiare in futuro, il che potrebbe rompere questi esempi.
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>
Dalla specifica HTML ( source )
L'attributo
audio/*
può essere specificato per fornire agli user agent un suggerimento su quali tipi di file saranno accettati.Se specificato, l'attributo deve essere costituito da a set di token separati da virgola , ognuno dei quali deve essere un ASCII insensibile al maiuscolo corrispondenza per uno dei seguenti:
La stringa
video/*
- Indica che i file audio sono accettati.
La stringa
image/*
- Indica che i file video sono accettati.
La stringa <=>
- Indica che i file di immagine sono accettati.
A tipo MIME valido senza parametri
- Indica che i file del tipo specificato sono accettati.
Una stringa il cui primo carattere è un carattere FULL STOP U + 002E (.)
- Indica che i file con l'estensione specificata sono accettati.
Altri suggerimenti
Sì, è estremamente utile nei browser che lo supportano, ma il " limitando " è una comodità per gli utenti (quindi non sono sopraffatti da file irrilevanti) piuttosto che come un modo per impedire loro di caricare cose che non vuoi che vengano caricate.
È supportato in
- Chrome 16 +
- Safari 6 +
- Firefox 9 +
- IE 10 +
- Opera 11 +
Ecco un elenco di tipi di contenuto che puoi usalo, seguito dalle estensioni di file corrispondenti (anche se ovviamente puoi usare qualsiasi estensione di file):
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'attributo Accept è stato introdotto nel RFC 1867 , con l'intenzione di abilitare il filtro di tipo file sul tipo MIME per il controllo selezione file. Ma a partire dal 2008, la maggior parte, se non tutti, i browser non fanno uso di questo attributo. Utilizzando lo scripting lato client, è possibile effettuare una sorta di convalida basata sull'estensione, per inviare dati di tipo corretto (estensione).
Altre soluzioni per il caricamento di file avanzato richiedono filmati Flash come SWFUpload o applet Java come JUpload .
Nel 2015 l'unico modo che ho trovato per farlo funzionare sia per Chrome che Firefox è mettere tutte le possibili estensioni che vuoi supportare , comprese le varianti:
accept=".jpeg, .jpg, .jpe, .jfif, .jif"
Problema con FireFox : utilizzando il tipo mime image / jpeg
FireFox mostrerà solo i file .jpg
, molto strano come se il comune < code> .jpeg non era ok ...
Qualunque cosa tu faccia, assicurati di provare con file con molte estensioni diverse. Forse dipende anche dal sistema operativo ...
Suppongo che accetta
non faccia distinzione tra maiuscole e minuscole, ma forse non in tutti i browser.
Ecco i i documenti MDN sull'accettazione :
accettare Se il valore dell'attributo type è file, questo attributo indicherà i tipi di file accettati dal server, altrimenti sarà ignorato. Il valore deve essere un elenco separato da virgole di unico identificatori del tipo di contenuto:
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
È supportato da Chrome. Non dovrebbe essere usato per la convalida, ma per suggerire il tipo di sistema operativo. Se hai un attributo accept = " image / jpeg "
in un caricamento di file, il sistema operativo può mostrare solo file del tipo suggerito.
Sono passati alcuni anni e Chrome utilizza almeno questo attributo. Questo attributo è molto utile dal punto di vista dell'usabilità in quanto filtrerà i file non necessari per l'utente, rendendo la loro esperienza più fluida. Tuttavia, l'utente può comunque selezionare " tutti i file " dal tipo (o altrimenti ignora il filtro), quindi dovresti sempre convalidare il file dove è effettivamente utilizzato; Se lo stai usando sul server, validalo lì prima di usarlo. L'utente può sempre ignorare qualsiasi script sul lato client.
Se il browser utilizza questo attributo, è solo un aiuto per l'utente, quindi non caricherà un file multi-megabyte solo per vederlo rifiutato dal server ...
Lo stesso vale per < input type = " hidden " name = " MAX_FILE_SIZE " valore = tag " 100000 " >
: se il browser lo utilizza, non invierà il file ma un errore con conseguente UPLOAD_ERR_FORM_SIZE
(2) errore in PHP (non so come è gestito in altre lingue).
Nota che sono utili per l ' utente . Naturalmente, il server deve sempre controllare il tipo e le dimensioni del file alla sua estremità: è facile manomettere questi valori sul lato client.
Nel 2008 questo non era importante a causa della mancanza di sistemi operativi mobili, ma ora cosa abbastanza importante.
Quando imposti i tipi di mime accettati, ad esempio all'utente Android viene visualizzata una finestra di dialogo di sistema con app che possono fornirgli il contenuto di mime che l'input di file accetta, il che è fantastico perché la navigazione attraverso i file in Esplora file su dispositivi mobili è lenta e spesso stressante.
Una cosa importante è che alcuni browser per dispositivi mobili (basati sulla versione Android di Chrome 36 e Chrome Beta 37) non supportano il filtraggio delle app su estensioni e più tipi di mime.