Атрибут 'accept' ввода файла - это полезно?

Реализовать загрузку файла в формате html довольно просто, но я только что заметил, что есть атрибут accept, который можно добавить к тегу <input type = "file" ...>.

Полезен ли этот атрибут как способ ограничения загрузки файлов изображениями и т. д.? Как лучше всего его использовать?

В качестве альтернативы, есть ли способ ограничить типы файлов, предпочтительно в диалоговом окне файла, для тега ввода файла html?

Что касается ответа Ли Хуана, то правильная ссылка на w3school: w3schools.com/TAGS/att_input_accept.asp

PixEye 21.12.2011 20:02

Я только что пробовал использовать accept = application / x-gzip, и он работал с Chrome 19.0.1084.52, но ничего не делал в FF 13.0 и IE 8.0.6001.

Jeach 14.06.2012 23:26

Ознакомьтесь с jsfiddle.net/jhfrench/cukjxnp6/embedded/result, чтобы узнать, как улучшить input type = "file", чтобы убедиться, что можно выбирать только типы файлов с accept.

Jeromy French 24.12.2015 02:07
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
347
3
345 664
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Атрибут Accept был введен в RFC 1867, намереваясь включить фильтрацию типов файлов на основе типа MIME для элемента управления выбором файлов. Но с 2008 года большинство браузеров, если не все, не используют этот атрибут. Используя клиентские сценарии, вы можете сделать своего рода проверку на основе расширений для отправки данных правильного типа (расширения).

Другие решения для расширенной загрузки файлов требуют Flash-роликов, таких как SWFUpload, или Java-апплетов, таких как Загрузить.

Согласно Википедии (en.wikipedia.org/wiki/…), Opera кажется единственным браузером, поддерживающим это. На самом деле это большой позор.

Zecc 01.12.2010 15:12

хром, похоже, его использует. он, вероятно, нашел свое место в webkit

yincrash 11.02.2011 01:27

Android Honeycomb и ICS поддерживают это.

greyfade 24.01.2012 03:06

Атрибут accept является частью спецификации HTML5: whatwg.org/specs/web-apps/current-work/multipage/…

Mathias Bynens 16.02.2012 17:34

«Атрибут accept в настоящее время поддерживается только Opera 11+, Chrome 16+ и Firefox 9+». От: en.wikipedia.org/wiki/File_select#Accept_attribute_support

Simon 11.03.2012 18:40

IE 10+ поддерживает атрибут accept. Это был последний отставший, который этого не сделал.

sj26 01.06.2012 09:48

Извините, ребята, я не обновлял этот ответ с 2008 года (эй, почти 4 года). Я обновлю его как можно скорее ...

Christian C. Salvadó 01.06.2012 12:19

Правильный ответ - более новый от @bfrohs - типы MIME: iana.org/assignments/media-types

juanmirocks 23.01.2013 21:18

Если браузер использует этот атрибут, это только помощь для пользователя, поэтому он не будет загружать многомегабайтный файл только для того, чтобы увидеть, что он отклонен сервером ...
То же самое для тега <input type = "hidden" name = "MAX_FILE_SIZE" value = "100000">: если браузер использует его, он не отправит файл, а будет ошибка, приводящая к ошибке UPLOAD_ERR_FORM_SIZE (2) в PHP (не знаю, как это обрабатывается на других языках) .
Обратите внимание, что это помощь для Пользователь. Конечно, сервер всегда должен проверять тип и размер файла на своем конце: эти значения легко изменить на стороне клиента.

Поддерживается Chrome. Он должен использоваться не для проверки, а для указания типа ОС. Если у вас есть атрибут accept = "image/jpeg" в загружаемом файле, ОС может отображать только файлы предложенного типа.

Я подтверждаю, что accept = "image/*" работает в Firefox, Chrome и Opera.

remi.gaubert 27.12.2011 19:16

он не работает в Safari, я использую Safari 5.1.7 в Windows

anand 02.04.2013 14:31

@MMMMS Вам необходимо указать тип MIME, а не расширение файла. Вместо этого используйте accept = "text/plain".

mbomb007 08.08.2016 20:03

Прошло несколько лет, а 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>

Из спецификации HTML (источник)

The accept attribute 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'

Charlie Schliesser 27.06.2012 20:49

Я могу заставить вышеуказанное работать только в Chrome. В Firefox 13 я не могу заставить работать несколько типов файлов (разделенных запятыми или иначе), кроме использования одного подстановочного типа, такого как image/*. Облом.

Charlie Schliesser 27.06.2012 21:31

@CharlieS, да, как упоминалось в моем ответе, примеры взяты из Спецификация и могут не работать ни в каких браузерах. Тем не менее, это что-то в разработке, и есть большая вероятность, что эти функции появятся в браузерах в будущем (хотя они могут быть удалены из спецификации до того, как они будут реализованы).

0b10011 27.06.2012 22:00

Например, Internet Explorer 9 не заботится об атрибуте accept - я пробовал демо, и он всегда отображает *.* как маску файла.

Matt 04.04.2013 16:32

Согласно спецификации: Value: A set of comma-separated strings, each of which is a valid MIME type, with no parameters. Только типы пантомимы. Никаких расширений. Клиент должен определить тип пантомимы.

Rudie 31.08.2013 17:48

Я не уверен, откуда вы получаете свою информацию, но в спецификации, на которую я ссылался в ответе, это указано как совершенно правильное: A string whose first character is a U+002E FULL STOP character (.) -- Indicates that files with the specified file extension are accepted.

0b10011 31.08.2013 19:57

video/* означает, что вы не можете загружать mp4 в Safari, вам также необходимо указать video/mp4

Kit Sunde 10.12.2013 06:04

Мне нужно было принять некоторые расширения изображений, включая JPG, JPEG, BMP и PNG. Я должен использовать: accept = "image/png|jpe?g|bmp", чтобы принимать как JPG, так и JPEG (это вызвало ошибку с jpg|jpeg). Если бы это могло кому-то помочь ...

AlexB 31.03.2015 11:53

если вы хотите использовать специфические для пользователя mimetypes, отличные от упомянутых, вы можете перейти сюда: freeformatter.com/mime-types-list.html

bonbon.langes 19.06.2015 16:19

Safari 9.1, похоже, работает Только с типами Mime, а не с типами точек

Dmitry Gonchar 11.04.2016 14:49

Пожалуйста, поймите, что в контексте мобильного браузера атрибут accept имеет крайне ненадежную поддержку - и фактически он также был исключен в некоторых последних выпусках. Не полагайтесь на него для мобильных нужд вашего приложения (ссылка: caniuse.com/#search=accept)

Hassan Baig 30.04.2018 14:22

Да, это чрезвычайно полезно в браузерах, которые его поддерживают, но «ограничение» - это удобство для пользователей (чтобы они не перегружались нерелевантными файлами), а не способ помешать им загружать то, что вам не нужно. загрузка.

Поддерживается в

  • Chrome 16+
  • Safari 6+
  • Firefox 9+
  • IE 10+
  • Opera 11+

Вот список типов контента, который вы можете использовать с ним, за которым следуют соответствующие расширения файлов (хотя, конечно, вы можете использовать любое расширение файла):

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 14.12.2015 18:46

@Triynko У меня такая же проблема, но я это вижу, например Chrome загружает шрифт ttf как "application / octet-stream", поэтому его нельзя использовать в элементе ввода файла ...

estani 18.09.2019 12:00

Просто узнайте, что accept также может использовать суффиксы файлов! так что accept = ".ttf" работает как положено.

estani 18.09.2019 12:07

В 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 нечувствителен к регистру, но, возможно, не во всех браузерах.

Вот Документы MDN о 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

Это лучший ответ, поскольку он касается кросс-браузерной совместимости.

mbomb007 07.02.2017 20:32

Это хороший ответ. Не забудьте включить символ «STOP», '.'. Это была моя проблема.

fungusanthrax 12.12.2017 22:45

Другие вопросы по теме