Aquí está el HTML para cargar la imagen.De forma predeterminada, mostrará los archivos de imagen solo en la ventana de exploración porque hemos puesto accept="image/*"
. Pero aún podemos cambiarlo del menú desplegable y mostrará todos los archivos. Entonces, la parte de Javascript valida si el archivo seleccionado es una imagen real o no.
<div class="col-sm-8 img-upload-section">
<input name="image3" type="file" accept="image/*" id="menu_images"/>
<img id="menu_image" class="preview_img" />
<input type="submit" value="Submit" />
</div>
Aquí en el evento de cambio, primero comprobemos el tamaño de la imagen. Y en la segunda condición if
comprobamos si es o no un archivo de imagen.
this.files[0].type.indexOf("image")
será -1
si no es un archivo de imagen.
document.getElementById("menu_images").onchange = function() {
var reader = new FileReader();
if(this.files[0].size>528385){
alert("Image Size should not be greater than 500Kb");
$("#menu_image").attr("src","blank");
$("#menu_image").hide();
$('#menu_images').wrap('<form>').closest('form').get(0).reset();
$('#menu_images').unwrap();
return false;
}
if(this.files[0].type.indexOf("image")==-1){
alert("Invalid Type");
$("#menu_image").attr("src","blank");
$("#menu_image").hide();
$('#menu_images').wrap('<form>').closest('form').get(0).reset();
$('#menu_images').unwrap();
return false;
}
reader.onload = function (e) {
// get loaded data and render thumbnail.
document.getElementById("menu_image").src = e.target.result;
$("#menu_image").show();
};
// read the image file as a data URL.
reader.readAsDataURL(this.files[0]);
};
Obviamente, a properply asegúrate esto - Verificaría el lado del backend/servidor. Pero todo lo que busco es una forma sencilla de la experiencia del usuario, de modo que cuando hagan clic en "navegar" para encontrar la imagen que desean cargar, no tengan que ver todos esos documentos de Word, etc. que no son aplicables a subir – JacobT
No sé si puede establecer una máscara de archivo. Nunca lo he visto hecho con éxito. –