2011-03-10 7 views
13

En mi aplicación quiero que cuando un usuario cargue un archivo de imagen, entonces quiero mostrarle al usuario la imagen inmediatamente antes de enviar el formulario. Esto es para que puedan obtener una vista previa de la imagen antes de enviar el formulario.¿Cómo puedo mostrar una vista previa de la imagen en el navegador sin cargar el archivo de imagen en el servidor?

¿Hay alguna forma en HTML5 de que el cargador de archivos pueda mostrar la imagen en el lado del cliente antes de enviar el formulario real?

Quiero permitir al usuario obtener una vista previa del archivo de imagen sin cargar el archivo en el servidor (así que tampoco subirlo al directorio temporal), pero de alguna manera solo mostrar la imagen en el lado del cliente en el navegador del cliente.

Respuesta

36

Dado que este fue el primer resultado para google("html5 image preview"), pensé que obtendría una respuesta con contenido. Espero que sea útil.

<img id="preview" src="placeholder.png" height="100px" width="100px" /> 
<input type="file" name="image" onchange="previewImage(this)" accept="image/*"/> 
<script type="text/javascript">  
    function previewImage(input) { 
    var preview = document.getElementById('preview'); 
    if (input.files && input.files[0]) { 
     var reader = new FileReader(); 
     reader.onload = function (e) { 
     preview.setAttribute('src', e.target.result); 
     } 
     reader.readAsDataURL(input.files[0]); 
    } else { 
     preview.setAttribute('src', 'placeholder.png'); 
    } 
    } 
</script> 
+0

debería ser '' 'this.target.files''' – Udo

+0

Cuando dice" debería ser ", ¿qué quiere decir? Pregunto porque deliberadamente pasé el elemento a la función como un argumento en el atributo 'onchange' por el bien de este ejemplo. Si quiere decir que un controlador de eventos "debe" estructurarse de manera diferente a este código de ejemplo, está bien, pero no hay ninguna razón para hacer un cambio aquí. –

Cuestiones relacionadas