2010-09-30 16 views
169

Necesito cargar un archivo que es una imagen. Estoy usando <input type="file">.Cómo permitir que <input type = "file"> acepte solo archivos de imagen

Sin embargo, esto acepta todo tipo de archivos. Necesito solo archivos con extensiones como .jpg, .gif etc.

¿Cómo puedo hacer que el cuadro de diálogo de carga permita la selección de solo archivos de imagen?

+0

¿Cuál es la tecnología utilizada en el servidor? –

+0

kbvishnu, quizás puedas reconsiderar la respuesta que aceptaste hace tanto tiempo. No tienes que aceptar otra respuesta. Solo estoy sugiriendo, en función de la cantidad de indicadores que obtuvimos en la respuesta y su nivel de votos en comparación con otras respuestas, que tal vez debería al menos considerar no aceptarlo. –

Respuesta

517

Utilice el atributo aceptar de la etiqueta de entrada. Así que para aceptar sólo PNG, JPEG y GIF se puede utilizar el siguiente código:

<input type="file" name="myImage" accept="image/x-png,image/gif,image/jpeg" />

O simplemente:

<input type="file" name="myImage" accept="image/*" />

Tenga en cuenta que esto sólo ofrece una sugerencia para el navegador sobre qué tipos de archivos mostrar al usuario, pero esto puede se puede eludir fácilmente, por lo que siempre debe validar el archivo cargado en el servidor también.

Debería funcionar en IE 10+, Chrome, Firefox, Safari 6+, Opera 15+, pero el soporte es muy incompleto en los móviles (a partir de 2015) y según algunos informes, esto podría evitar que algunos navegadores móviles suban en absoluto, así que asegúrese de probar bien sus plataformas objetivo.

Para soporte detallada navegador, ver http://caniuse.com/#feat=input-file-accept

+1

No funciona en IE9. – hllau

+1

No funciona en Opera 12.12 –

+0

¡No funciona en FF 19! – behz4d

120

El uso de este:

<input type="file" accept="image/*"> 

funciona tanto en FF y Chrome.

+1

Funciona en Chrome y Firefox. También funciona en Opera. El –

+5

aceptar atributo no es una herramienta de validación, todos los archivos subidos deben ser validados en el servidor, siempre ... – TlonXP

+1

Esto funciona en Safari. – idmean

15

Esto se puede lograr mediante

<input type="file" accept="image/*" /> 

Pero esta no es una buena manera. tienes que codificar en el servidor para verificar el archivo de una imagen o no.

Comprobar si el archivo de imagen es una imagen real o falsa imagen

if(isset($_POST["submit"])) { 
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); 
    if($check !== false) { 
     echo "File is an image - " . $check["mime"] . "."; 
     $uploadOk = 1; 
    } 
    else { 
     echo "File is not an image."; 
     $uploadOk = 0; 
    } 
} 

Para mayor referencia, ver aquí

http://www.w3schools.com/tags/att_input_accept.asp
http://www.w3schools.com/php/php_file_upload.asp

4

Pasos: 1. Añadir
aceptar atributo etiqueta de entrada
2. Validar con javascript
validación del lado del servidor 3. Agregar para verificar si el contenido es realmente un tipo de archivo esperado

Para HTML y Javascript:

<html> 
<body> 
<input name="image" type="file" id="fileName" accept=".jpg,.jpeg,.png" onchange="validateFileType()"/> 
<script type="text/javascript"> 
    function validateFileType(){ 
     var fileName = document.getElementById("fileName").value; 
     var idxDot = fileName.lastIndexOf(".") + 1; 
     var extFile = fileName.substr(idxDot, fileName.length).toLowerCase(); 
     if (extFile=="jpg" || extFile=="jpeg" || extFile=="png"){ 
      //TO DO 
     }else{ 
      alert("Only jpg/jpeg and png files are allowed!"); 
     } 
    } 
</script> 
</body> 
</html> 

Explicación:

  1. El atributo aceptar filtra los archivos que se mostrará en el selector de archivos emergente. Sin embargo, no es una validación. Es solo una sugerencia para el navegador. El usuario aún puede cambiar las opciones en el emergente .
  2. El javascript solo valida la extensión de archivo, pero no puede realmente verificar si el archivo de selección es un jpg o png real.
  3. Así que debe escribir para validar el contenido del archivo en el servidor.
Cuestiones relacionadas