파일 입력 'accept'속성-유용합니까?


338

html로 파일 업로드를 구현하는 것은 매우 간단하지만 <input type="file" ...>태그에 추가 할 수있는 'accept'속성이 있음을 알았습니다 .

이 속성은 이미지 등으로 파일 업로드를 제한하는 방법으로 유용합니까? 그것을 사용하는 가장 좋은 방법은 무엇입니까?

또는 html 파일 입력 태그에 대해 파일 대화 상자에서 파일 형식을 제한하는 방법이 있습니까?


1
Li Huan의 답변과 관련하여 w3school에 대한 올바른 링크는 다음과 같습니다. w3schools.com/TAGS/att_input_accept.asp
PixEye

1
방금 'accept = application / x-gzip'을 사용해 보았고 'Chrome 19.0.1084.52'와 함께 작동했지만 'FF 13.0'및 'IE 8.0.6001'에서는 아무것도하지 않습니다.
Jeach

ed 파일 형식 만 선택할 수 있는지 확인하는 향상 방법은 jsfiddle.net/jhfrench/cukjxnp6/embedded/result 를 확인하십시오 . input type="file"accept
Jeromy French

답변:


439

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 사양에서 ( source )

accept속성은 사용자 에이전트에게 어떤 파일 형식이 허용되는지 힌트를 제공하도록 지정 될 수 있습니다.

지정된 경우 속성 은 쉼표로 구분 된 토큰 세트 로 구성 되어야하며 각 토큰 은 다음 중 하나에 대해 대소 문자를 구분하지 않는 ASCII 여야합니다 .

audio/*

  • 사운드 파일이 허용됨을 나타냅니다.

video/*

  • 비디오 파일이 허용됨을 나타냅니다.

image/*

  • 이미지 파일이 허용됨을 나타냅니다.

매개 변수없이 유효한 MIME 타입

  • 지정된 유형의 파일이 허용됨을 나타냅니다.

첫 문자가 U + 002E FULL STOP 문자 (.) 인 문자열

  • 지정된 파일 확장자를 가진 파일이 허용됨을 나타냅니다.

71
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 2016 년

7
위의 내용은 Chrome에서만 작동합니다. Firefox 13에서는와 같은 단일 와일드 카드 유형을 제외하고 여러 파일 유형을 쉼표로 구분하거나 다른 방식으로 작동시킬 수 없습니다 image/*. 버머.
Charlie Schliesser 2016 년

3
사양에 따르면 : Value: A set of comma-separated strings, each of which is a valid MIME type, with no parameters.MIME 유형 만 있습니다. 확장명이 없습니다. MIME 유형을 결정하는 것은 클라이언트의 책임입니다.
Rudie

7
어디에서 정보를 얻을 수 있는지 잘 모르겠지만 답변에 링크 된 사양에서 이는 완벽하게 유효한 것으로 표시됩니다.A string whose first character is a U+002E FULL STOP character (.) -- Indicates that files with the specified file extension are accepted.
0b10011

4
video/*Safari에서 mp4를 업로드 할 수 없다는 의미도 지정해야합니다.video/mp4
Kit Sunde

88

예,이 기능을 지원하는 브라우저에서 매우 유용하지만 "제한적"은 사용자가 원하지 않는 것을 업로드하지 못하도록 막는 것이 아니라 사용자에게 편의 (따라서 관련없는 파일로 압도되지 않음)입니다. 업로드 중입니다.

지원됩니다

  • 크롬 16 +
  • 사파리 6 +
  • Firefox 9 이상
  • IE 10 +
  • 오페라 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

@Triynko 같은 문제가 있지만 Chrome과 같이 ttf 글꼴을 "application / octet-stream"으로 업로드하므로 파일 입력 요소에서 사용할 수 없습니다.
estani

수락하면 파일 접미사를 사용할 수도 있습니다. 그래서 accept=".ttf"예상대로 작동합니다.
estani

36

2015 년 ChromeFirefox 에서 모두 작동하도록 하는 유일한 방법 은 변형을 포함하여 지원하려는 가능한 모든 확장 프로그램을 배치하는 것입니다.

accept=".jpeg, .jpg, .jpe, .jfif, .jif"

Firefox 문제 : image/jpegMIME 유형을 사용하면 Firefox는 .jpg파일이 표시 됩니다. 공통 .jpeg이 좋지 않은 것처럼 매우 이상합니다 ...

무엇을 하든지 확장명이 많은 파일을 사용해보십시오. 어쩌면 그것은 심지어 OS에 달려 있습니다 ... accept대소 문자를 구분하지 않지만 모든 브라우저에서 그렇지는 않을 것입니다.

accept에 관한 MDN 문서 는 다음과 같습니다 .

accept type 속성의 값이 file 인 경우이 속성은 서버가 허용하는 파일 유형을 나타내며, 그렇지 않으면 무시됩니다. 값은 쉼표로 구분 된 고유 컨텐츠 유형 지정자 목록이어야합니다.

    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

1
이것은 브라우저 간 호환성을 해결하기 때문에 가장 좋은 대답입니다.
mbomb007

1
이 대답은 좋습니다. "STOP"문자 '.'를 포함해야합니다. 그게 내 문제 였어
fungusanthrax

35

RFC 1867 에 Accept 속성이 도입되어 파일 선택 컨트롤에 MIME 유형을 기반으로 파일 유형 필터링이 가능합니다. 그러나 2008 년 현재 대부분의 브라우저는이 속성을 사용하지 않습니다. 클라이언트 측 스크립팅을 사용하면 올바른 유형 (확장자)의 데이터를 제출하기 위해 일종의 확장 기반 검증을 수행 할 수 있습니다.

고급 파일 업로드를위한 다른 솔루션에는 SWFUpload 와 같은 Flash 영화 나 JUpload 와 같은 Java 애플릿이 필요 합니다.


5
Wikipedia ( en.wikipedia.org/wiki/… ) 에 따르면 Opera는이를 지원하는 유일한 브라우저 인 것 같습니다. 정말 부끄러운 일입니다.
Zecc

4
크롬이 그것을 사용하는 것 같습니다. 아마 웹킷에
들어갔

9
"accept 속성은 현재 Opera 11 이상, Chrome 16 이상 및 Firefox 9 이상에서만 지원됩니다." 보낸
사람

6
IE 10+는 accept 속성을 지원합니다. 하지 말아야 할 마지막 마약 중독자였습니다.
sj26 2016 년

1
정답은 @bfrohs의 최신 답변입니다.-MIME 유형 : iana.org/assignments/media-types
juanmirocks

24

Chrome에서 지원합니다. 유효성 검사에는 사용되지 않지만 OS에 대한 힌트 유형에 사용됩니다. 당신이 경우 accept="image/jpeg"파일의 속성은 OS는 제안 된 형식의 파일을 표시 할 수 있습니다 업로드 할 수 있습니다.


6
accept="image/*"Firefox, Chrome 및 Opera에서 작동 함을 확인합니다 .
remi.gaubert

1
Safari에서 작동하지 않습니다. Windows에서 Safari 5.1.7을 사용하고 있습니다.
anand

@MMMMS 파일 확장자가 아닌 MIME 유형을 제공해야합니다. accept="text/plain"대신 사용하십시오 .
mbomb007

12

몇 년이 지났으며 Chrome은 적어도이 속성을 사용합니다. 이 속성은 사용자에게 불필요한 파일을 걸러내어 사용자 경험을 매끄럽게 만들기 때문에 유용성 관점에서 매우 유용합니다. 그러나 사용자는 여전히 유형에서 "모든 파일"을 선택하거나 필터를 무시할 수 있으므로 항상 실제로 사용되는 파일의 유효성을 검사해야합니다. 서버에서 사용하는 경우 사용하기 전에 서버에서 확인하십시오. 사용자는 항상 클라이언트 측 스크립팅을 우회 할 수 있습니다.


6

브라우저가이 속성을 사용하는 경우 사용자에게만 도움이되므로 서버에서 거부 된 것을 확인하기 위해 멀티 메가 바이트 파일을 업로드하지 않습니다
. <input type="hidden" name="MAX_FILE_SIZE" value="100000">태그 와 동일 : 브라우저에서 사용하는 경우, 파일을 보내지 않지만 UPLOAD_ERR_FORM_SIZEPHP 에서 (2) 오류를 발생시키는 오류가 발생합니다 (다른 언어로 어떻게 처리되는지 확실하지 않음).
이것은 사용자에게 도움이됩니다 . 물론 서버는 항상 파일 끝과 유형을 확인해야합니다. 클라이언트 측에서 이러한 값을 쉽게 조작 할 수 있습니다.


0

2008 년에 이것은 모바일 OS가 없기 때문에 중요하지 않았지만 지금은 매우 중요합니다.

허용 된 MIME 유형을 설정하면 예를 들어 Android 사용자에게 파일 입력이 허용하는 MIME의 컨텐츠를 제공 할 수있는 앱이있는 시스템 대화 상자가 제공됩니다. 모바일 장치의 파일 탐색기에서 파일 탐색이 느리고 스트레스가 많기 때문에 큰 이점 .

한 가지 중요한 점은 일부 모바일 브라우저 (Android 버전의 Chrome 36 및 Chrome 베타 37 기반)는 확장 프로그램 및 여러 MIME 유형에 대한 앱 필터링을 지원하지 않는다는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.