Реализовать загрузку файла в формате html довольно просто, но я только что заметил, что есть атрибут accept, который можно добавить к тегу <input type = "file" ...>.
Полезен ли этот атрибут как способ ограничения загрузки файлов изображениями и т. д.? Как лучше всего его использовать?
В качестве альтернативы, есть ли способ ограничить типы файлов, предпочтительно в диалоговом окне файла, для тега ввода файла html?
Я только что пробовал использовать accept = application / x-gzip, и он работал с Chrome 19.0.1084.52, но ничего не делал в FF 13.0 и IE 8.0.6001.
Ознакомьтесь с jsfiddle.net/jhfrench/cukjxnp6/embedded/result, чтобы узнать, как улучшить input type = "file", чтобы убедиться, что можно выбирать только типы файлов с accept.






Атрибут Accept был введен в RFC 1867, намереваясь включить фильтрацию типов файлов на основе типа MIME для элемента управления выбором файлов. Но с 2008 года большинство браузеров, если не все, не используют этот атрибут. Используя клиентские сценарии, вы можете сделать своего рода проверку на основе расширений для отправки данных правильного типа (расширения).
Другие решения для расширенной загрузки файлов требуют Flash-роликов, таких как SWFUpload, или Java-апплетов, таких как Загрузить.
Согласно Википедии (en.wikipedia.org/wiki/…), Opera кажется единственным браузером, поддерживающим это. На самом деле это большой позор.
хром, похоже, его использует. он, вероятно, нашел свое место в webkit
Android Honeycomb и ICS поддерживают это.
Атрибут accept является частью спецификации HTML5: whatwg.org/specs/web-apps/current-work/multipage/…
«Атрибут accept в настоящее время поддерживается только Opera 11+, Chrome 16+ и Firefox 9+». От: en.wikipedia.org/wiki/File_select#Accept_attribute_support
IE 10+ поддерживает атрибут accept. Это был последний отставший, который этого не сделал.
Извините, ребята, я не обновлял этот ответ с 2008 года (эй, почти 4 года). Я обновлю его как можно скорее ...
Правильный ответ - более новый от @bfrohs - типы MIME: iana.org/assignments/media-types
Если браузер использует этот атрибут, это только помощь для пользователя, поэтому он не будет загружать многомегабайтный файл только для того, чтобы увидеть, что он отклонен сервером ...
То же самое для тега <input type = "hidden" name = "MAX_FILE_SIZE" value = "100000">: если браузер использует его, он не отправит файл, а будет ошибка, приводящая к ошибке UPLOAD_ERR_FORM_SIZE (2) в PHP (не знаю, как это обрабатывается на других языках) .
Обратите внимание, что это помощь для Пользователь. Конечно, сервер всегда должен проверять тип и размер файла на своем конце: эти значения легко изменить на стороне клиента.
Поддерживается Chrome. Он должен использоваться не для проверки, а для указания типа ОС. Если у вас есть атрибут accept = "image/jpeg" в загружаемом файле, ОС может отображать только файлы предложенного типа.
Я подтверждаю, что accept = "image/*" работает в Firefox, Chrome и Opera.
он не работает в Safari, я использую Safari 5.1.7 в Windows
@MMMMS Вам необходимо указать тип MIME, а не расширение файла. Вместо этого используйте accept = "text/plain".
Прошло несколько лет, а Chrome по крайней мере использует этот атрибут. Этот атрибут очень полезен с точки зрения удобства использования, поскольку он отфильтровывает ненужные файлы для пользователя, делая его работу более плавной. Однако пользователь по-прежнему может выбрать «все файлы» из типа (или иным образом обойти фильтр), поэтому вы всегда должны проверять файл, в котором он фактически используется; Если вы используете его на сервере, проверьте его там, прежде чем использовать. Пользователь всегда может обойти любые сценарии на стороне клиента.
Атрибут accept невероятно полезен. Это подсказка браузерам показывать только те файлы, которые разрешены для текущего input. Хотя обычно это может быть отменено пользователями, оно помогает сузить результаты для пользователей по умолчанию, чтобы они могли получить именно то, что они ищут, без необходимости просеивать сотни различных типов файлов.
Примечание: Эти примеры были написаны на основе текущей спецификации и могут не работать во всех (или каких-либо) браузерах. Спецификация также может измениться в будущем, что может нарушить эти примеры.
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>The
acceptattribute may be specified to provide user agents with a hint of what file types will be accepted.If specified, the attribute must consist of a set of comma-separated tokens, each of which must be an ASCII case-insensitive match for one of the following:
The string
audio/*
- Indicates that sound files are accepted.
The string
video/*
- Indicates that video files are accepted.
The string
image/*
- Indicates that image files are accepted.
A valid MIME type with no parameters
- Indicates that files of the specified type are accepted.
A string whose first character is a U+002E FULL STOP character (.)
- Indicates that files with the specified file extension are accepted.
Мне нужно было принимать файлы в форматах JPG, PNG, GIF, PDF и EPS, но accept='.jpg,.png,.gif,.pdf,.eps' не допускал выбора. Я пробовал много вариантов - с разделителями пробелами, без точек и т. д., Но без кубиков в Chrome v20, поэтому в итоге я использовал типы mime, и он отлично работал: accept='image/jpeg,image/gif,image/png,application/pdf,image/x-eps'
Я могу заставить вышеуказанное работать только в Chrome. В Firefox 13 я не могу заставить работать несколько типов файлов (разделенных запятыми или иначе), кроме использования одного подстановочного типа, такого как image/*. Облом.
@CharlieS, да, как упоминалось в моем ответе, примеры взяты из Спецификация и могут не работать ни в каких браузерах. Тем не менее, это что-то в разработке, и есть большая вероятность, что эти функции появятся в браузерах в будущем (хотя они могут быть удалены из спецификации до того, как они будут реализованы).
Например, Internet Explorer 9 не заботится об атрибуте accept - я пробовал демо, и он всегда отображает *.* как маску файла.
Согласно спецификации: Value: A set of comma-separated strings, each of which is a valid MIME type, with no parameters. Только типы пантомимы. Никаких расширений. Клиент должен определить тип пантомимы.
Я не уверен, откуда вы получаете свою информацию, но в спецификации, на которую я ссылался в ответе, это указано как совершенно правильное: A string whose first character is a U+002E FULL STOP character (.) -- Indicates that files with the specified file extension are accepted.
video/* означает, что вы не можете загружать mp4 в Safari, вам также необходимо указать video/mp4
Мне нужно было принять некоторые расширения изображений, включая JPG, JPEG, BMP и PNG. Я должен использовать: accept = "image/png|jpe?g|bmp", чтобы принимать как JPG, так и JPEG (это вызвало ошибку с jpg|jpeg). Если бы это могло кому-то помочь ...
если вы хотите использовать специфические для пользователя mimetypes, отличные от упомянутых, вы можете перейти сюда: freeformatter.com/mime-types-list.html
Safari 9.1, похоже, работает Только с типами Mime, а не с типами точек
Пожалуйста, поймите, что в контексте мобильного браузера атрибут accept имеет крайне ненадежную поддержку - и фактически он также был исключен в некоторых последних выпусках. Не полагайтесь на него для мобильных нужд вашего приложения (ссылка: caniuse.com/#search=accept)
Да, это чрезвычайно полезно в браузерах, которые его поддерживают, но «ограничение» - это удобство для пользователей (чтобы они не перегружались нерелевантными файлами), а не способ помешать им загружать то, что вам не нужно. загрузка.
Поддерживается в
Вот список типов контента, который вы можете использовать с ним, за которым следуют соответствующие расширения файлов (хотя, конечно, вы можете использовать любое расширение файла):
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
Я не вижу ничего для шрифтов, таких как application / font-woff или application / x-font-ttf.
@Triynko У меня такая же проблема, но я это вижу, например Chrome загружает шрифт ttf как "application / octet-stream", поэтому его нельзя использовать в элементе ввода файла ...
Просто узнайте, что accept также может использовать суффиксы файлов! так что accept = ".ttf" работает как положено.
В 2008 году это было неважно из-за отсутствия мобильных ОС, но сейчас это очень важно.
Когда вы устанавливаете принятые типы mime, то, например, пользователю Android предоставляется системный диалог с приложениями, которые могут предоставить ему содержимое mime, которое принимает ввод файла, что здорово, потому что навигация по файлам в проводнике файлов на мобильных устройствах происходит медленно и часто вызывает стресс. .
Важным моментом является то, что некоторые мобильные браузеры (на основе Android-версии Chrome 36 и Chrome Beta 37) не поддерживают фильтрацию приложений по расширениям и нескольким типам MIME.
В 2015 году я обнаружил, что единственный способ работает как для Хром, так и для Fire Fox - это помещать все возможные расширения, которые вы хотите поддерживать, включая варианты (включая точку впереди!):
accept = ".jpeg, .jpg, .jpe, .jfif, .jif"
Проблема с Firefox: при использовании mime-типа image/jpeg Firefox будет показывать только файлы .jpg, что очень странно, как если бы обычный .jpeg был не в порядке ...
Что бы вы ни делали, обязательно попробуйте файлы с разными расширениями.
Возможно, это даже зависит от ОС ... Я полагаю, accept нечувствителен к регистру, но, возможно, не во всех браузерах.
accept If the value of the type attribute is file, then this attribute will indicate the types of files that the server accepts, otherwise it will be ignored. The value must be a comma-separated list of unique content type specifiers:
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
Это лучший ответ, поскольку он касается кросс-браузерной совместимости.
Это хороший ответ. Не забудьте включить символ «STOP», '.'. Это была моя проблема.
Что касается ответа Ли Хуана, то правильная ссылка на w3school: w3schools.com/TAGS/att_input_accept.asp