File input 'accept' atrybut - czy jest przydatny ?
Implementacja przesłania pliku Pod html jest dość prosta, ale właśnie zauważyłem, że istnieje atrybut "accept", który można dodać do tagu <input type="file" ...>
.
Czy ten atrybut jest przydatny jako sposób ograniczenia wysyłania plików do obrazów itp.? Jaki jest najlepszy sposób korzystania z niego?
Alternatywnie, czy istnieje sposób na ograniczenie typów plików, najlepiej w oknie dialogowym plik, dla znacznika wejściowego pliku html?
8 answers
Atrybut accept
jest niezwykle przydatny. Jest to wskazówka dla przeglądarek, aby pokazywać tylko pliki, które są dozwolone dla bieżącego input
. Chociaż zazwyczaj może być przesłonięty przez użytkowników, pomaga zawęzić wyniki dla użytkowników domyślnie, aby mogli uzyskać dokładnie to, czego szukają, bez konieczności przeszukiwania stu różnych typów plików.
Użycie
Uwaga: przykłady te zostały napisane w oparciu o aktualną specyfikację i mogą nie działać w wszystkie (lub dowolne) przeglądarki. Specyfikacja może również ulec zmianie w przyszłości, co może złamać te przykłady.
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>
Ze specyfikacji HTML (source)
Atrybut
accept
może być określony w celu zapewnienia agentom użytkownika podpowiedź, jakie typy plików będą akceptowane.Jeśli jest określony, atrybut musi składać się z zestaw oddzielonych przecinkami żetonów , każdy z nich musi być ASCII wielkość liter pasuje do jednego z poniższych:
The string
audio/*
- wskazuje, że pliki dźwiękowe są akceptowane.
The string
video/*
- wskazuje, że pliki wideo są akceptowane.
The string
image/*
- wskazuje, że pliki graficzne są akceptowane.
A poprawny typ MIME bez parametrów
- wskazuje, że pliki o określonym typ jest akceptowany.
Łańcuch znaków, którego pierwszym znakiem jest znak kropki u+002E (.)
- wskazuje, że pliki z podanym rozszerzeniem są akceptowane.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-12 17:22:11
Tak, jest to niezwykle przydatne w przeglądarkach, które go obsługują, ale "ograniczanie" jest wygodą dla użytkowników (więc nie są przytłoczeni nieistotnymi plikami), a nie jako sposób na uniemożliwienie im przesyłania rzeczy, których nie chcesz przesyłać.
Jest obsługiwany w
- Chrome 16 +
- Safari 6 +
- Firefox 9 +
- IE 10 +
- Opera 11 +
Oto lista typów treści , z których możesz korzystać, a następnie odpowiednie rozszerzenia plików (choć oczywiście można użyć dowolnego rozszerzenia pliku):
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-25 20:04:25
W 2015 rokujedynym sposobem okazało się, aby to działa zarówno dla Chrome i Firefox jest umieszczenie wszystkich możliwych rozszerzeń, które chcesz obsługiwać, w tym warianty (w tym kropka z przodu !):
accept=".jpeg, .jpg, .jpe, .jfif, .jif"
Problem z Firefoksem : używanie typu MIME image/jpeg
Firefox wyświetla tylko pliki .jpg
, bardzo dziwne, jakby wspólny .jpeg
nie był w porządku...
Cokolwiek robisz, pamiętaj, aby spróbować z plikami mającymi wiele różnych rozszerzeń. Może to nawet zależy od systemu operacyjnego ... Domyślam się, że {[5] } jest niewrażliwe na wielkość liter, ale może nie w każdej przeglądarce.
Oto MDN docs o accept :
Accept Jeśli wartością atrybutu type jest file, to atrybut ten wskaże typy plików, które serwer akceptuje, w przeciwnym razie zostanie zignorowany. Wartość musi być oddzieloną przecinkami listą unikalnych typ zawartości:
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-06 08:17:58
Atrybut Accept został wprowadzony w RFC 1867, zamierzając włączyć filtrowanie plików w oparciu o typ MIME dla kontrolki file-select. Ale od 2008 roku większość, jeśli nie wszystkie, przeglądarek nie używa tego atrybutu. Korzystając ze skryptów po stronie klienta, możesz dokonać walidacji opartej na rozszerzeniach, aby przesłać dane prawidłowego typu (rozszerzenie).
Inne rozwiązania do zaawansowanego przesyłania plików wymagają filmów Flash jak SWFUpload lub apletów Javy jak JUpload .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-03 17:03:45
Jest obsługiwany przez Chrome. To nie powinno być używane do walidacji, ale do typowania podpowiedzi systemu operacyjnego. Jeśli masz atrybut accept="image/jpeg"
w przesłanym pliku, System Operacyjny może wyświetlać tylko pliki sugerowanego typu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-16 18:11:48
Minęło kilka lat, a Chrome przynajmniej korzysta z tego atrybutu. Ten atrybut jest bardzo przydatny z punktu widzenia użyteczności, ponieważ odfiltruje niepotrzebne pliki dla użytkownika, dzięki czemu ich wrażenia są płynniejsze. Jednak użytkownik może wybrać" wszystkie pliki " z typu (lub w inny sposób ominąć filtr), dlatego zawsze powinieneś zweryfikować plik, w którym jest on rzeczywiście używany; jeśli używasz go na serwerze, sprawdź go tam przed użyciem. Użytkownik zawsze może ominąć wszelkie skrypty po stronie klienta.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-10 02:05:19
Jeśli przeglądarka używa tego atrybutu, jest to tylko pomoc dla użytkownika, więc nie chce przesłać pliku wielomegabajtowego tylko po to, aby zobaczyć go odrzuconego przez serwer...
To samo dotyczy znacznika <input type="hidden" name="MAX_FILE_SIZE" value="100000">
: jeśli przeglądarka go używa, nie wyśle pliku, ale błąd powodujący błąd UPLOAD_ERR_FORM_SIZE
(2) w PHP (Nie wiem, jak jest obsługiwany w innych językach).
Uwaga są to pomoce dla Użytkownika. Oczywiście serwer zawsze musi sprawdzić typ i rozmiar pliku na jego końcu: łatwo jest je manipulować wartości po stronie klienta.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-08 06:06:24
W 2008 nie było to ważne z powodu braku mobilnych systemów operacyjnych, ale teraz dość ważna rzecz.
Po ustawieniu akceptowanych typów mime, wtedy na przykład użytkownik Androida otrzymuje okno dialogowe systemu z aplikacjami, które mogą dostarczyć mu zawartość mime, którą akceptuje wejście pliku, co jest świetne, ponieważ poruszanie się po plikach w Eksploratorze plików na urządzeniach mobilnych jest powolne i często stresujące.
Ważną rzeczą jest to, że niektóre przeglądarki mobilne (oparte na Androidowej wersji Chrome 36 Chrome Beta 37) nie obsługuje filtrowania aplikacji przez rozszerzenia i wiele typów mime.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-13 17:24:44