una significa seleccionar que para los imagenes imagen formulario como atributos atributo archivo agregar adjuntar html html5 filter cross-browser mime-types

html - seleccionar - que significa alt en una imagen



Entrada de archivo ''aceptar'' atributo-¿es útil? (8)

Implementar una carga de archivos en html es bastante simple, pero me di cuenta de que hay un atributo ''aceptar'' que se puede agregar a la etiqueta <input type="file" ...> .

¿Es este atributo útil como una forma de limitar las cargas de archivos a imágenes, etc.? ¿Cuál es la mejor manera de usarlo?

Alternativamente, ¿hay una manera de limitar los tipos de archivos, preferiblemente en el diálogo de archivo, para una etiqueta de entrada de archivo html?


El atributo de accept es increíblemente útil. Es una sugerencia para los navegadores mostrar solo los archivos permitidos para la input actual. Si bien los usuarios generalmente pueden anularlo, ayuda a reducir los resultados para los usuarios de manera predeterminada, para que puedan obtener exactamente lo que están buscando sin tener que examinar cientos de tipos de archivos diferentes.

Uso

Nota: estos ejemplos se escribieron en función de la especificación actual y es posible que no funcionen en todos los navegadores (o en ninguno). La especificación también puede cambiar en el futuro, lo que podría romper estos ejemplos.

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>

De la especificación HTML ( source )

El atributo de accept puede especificarse para proporcionar a los agentes de usuario una sugerencia de qué tipos de archivos se aceptarán.

Si se especifica, el atributo debe consistir en un conjunto de tokens separados por comas , cada uno de los cuales debe ser una coincidencia ASCII entre mayúsculas y minúsculas para uno de los siguientes:

La cadena de audio/*

  • Indica que los archivos de sonido son aceptados.

La cadena de video/*

  • Indica que los archivos de video son aceptados.

La image/* cadena image/*

  • Indica que los archivos de imagen son aceptados.

Un tipo MIME válido sin parámetros

  • Indica que se aceptan archivos del tipo especificado.

Una cadena cuyo primer carácter es un carácter U + 002E FULL STOP (.)

  • Indica que se aceptan archivos con la extensión de archivo especificada.

El atributo de aceptación se introdujo en el RFC 1867 , con la intención de habilitar el filtrado de tipo de archivo basado en el tipo MIME para el control de selección de archivo. Pero a partir de 2008, la mayoría, si no todos, los navegadores no hacen uso de este atributo. Usando scripts del lado del cliente, puede hacer una especie de validación basada en extensión, para enviar datos del tipo correcto (extensión).

Otras soluciones para la carga avanzada de archivos requieren películas Flash como SWFUpload o Java Applets como JUpload .


En 2008, esto no era importante debido a la falta de sistemas operativos móviles, pero ahora es algo muy importante.

Cuando configura los tipos de mimo aceptados, entonces, por ejemplo, al usuario de Android se le proporciona un diálogo del sistema con aplicaciones que pueden proporcionarle el contenido de mime que acepta la entrada de archivos, lo que es excelente porque navegar por los archivos en el explorador de archivos en dispositivos móviles es lento y, a menudo, estresante .

Una cosa importante es que algunos navegadores móviles (basados ​​en la versión de Android de Chrome 36 y Chrome Beta 37) no son compatibles con el filtrado de aplicaciones sobre extensiones y múltiples tipos de mimos.


En 2015, la única forma que encontré para hacer que funcione tanto para Chrome como para Firefox es poner todas las extensiones posibles que desee admitir, incluidas las variantes:

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

Problema con FireFox : el uso del tipo de image/jpeg mime FireFox solo mostrará archivos .jpg , muy extraño como si el .jpeg común no estuviera bien ...

Hagas lo que hagas, asegúrate de probar con archivos que tengan muchas extensiones diferentes. Tal vez incluso depende del sistema operativo ...

Supongo que accept distingue mayúsculas de minúsculas, pero quizás no en todos los navegadores.

Aquí está la documentación de MDN sobre aceptar :

aceptar Si el valor del atributo de tipo es archivo, este atributo indicará los tipos de archivos que acepta el servidor, de lo contrario se ignorará. El valor debe ser una lista separada por comas de especificadores de tipo de contenido únicos:

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


Es compatible con Chrome. No se supone que se use para la validación, sino para indicar el sistema operativo. Si tiene un atributo accept="image/jpeg" en la carga de un archivo, el sistema operativo solo puede mostrar los archivos del tipo sugerido.


Han pasado algunos años, y Chrome al menos hace uso de este atributo. Este atributo es muy útil desde el punto de vista de la usabilidad, ya que filtrará los archivos innecesarios para el usuario, haciendo que su experiencia sea más suave. Sin embargo, el usuario aún puede seleccionar "todos los archivos" del tipo (o, de lo contrario, omitir el filtro), por lo tanto, siempre debe validar el archivo donde realmente se usa; Si lo está utilizando en el servidor, valídelo allí antes de usarlo. El usuario siempre puede omitir cualquier script del lado del cliente.


Sí, es extremadamente útil en los navegadores que lo admiten, pero la "limitación" es como una conveniencia para los usuarios (por lo que no están abrumados con archivos irrelevantes) en lugar de una forma de evitar que carguen cosas que no desea. subiendo

Es soportado en

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

Aquí hay una lista de tipos de contenido que puede usar con ella, seguidos de las extensiones de archivo correspondientes (aunque, por supuesto, puede usar cualquier extensión de archivo):

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


Si el navegador usa este atributo, es solo como una ayuda para el usuario, por lo que no cargará un archivo de varios megabytes solo para verlo rechazado por el servidor ...
Lo mismo para la etiqueta <input type="hidden" name="MAX_FILE_SIZE" value="100000"> : si el navegador lo usa, no enviará el archivo, pero se generará un error UPLOAD_ERR_FORM_SIZE (2) en PHP (no seguro como se maneja en otros idiomas).
Tenga en cuenta que estas son ayudas para el usuario . Por supuesto, el servidor siempre debe verificar el tipo y tamaño del archivo en su extremo: es fácil manipular estos valores en el lado del cliente.