readasdataurl read example ejemplo html5 google-chrome filereader

html5 - example - Chrome FileReader



read file javascript (2)

El objeto File API FileReader funciona de la misma manera en Chrome que en Firefox, Opera o Internet Explorer 10 (Sí, funciona en IE ).

Ejemplo simple

Empiezas declarando una nueva instancia del lector:

var reader = new FileReader();

Defina sus devoluciones de llamada para sus diversos events :

reader.onloadend = function( ){ document.body.style.backgroundImage = "url(" + this.result + ")"; }

Y luego pásale algo para leer:

reader.readAsDataURL( file );

Fiddle: http://jsfiddle.net/jonathansampson/K3A9r/

Manejo de múltiples archivos

Cuando trabajas con varios archivos, las cosas son un poco diferentes. Si bien está claro que debemos pasar por encima de FileList resultante, también necesitaremos utilizar un cierre para evitar que los datos de los archivos se alteren en numerosas iteraciones:

// Continue only if we have proper support if ( window.FileReader ) { // Provide our logic upon the change even of our input document.getElementById("collection").onchange = function(){ // Couple variables for handling each file var counter = -1, file; // Cycle over all files while ( file = this.files[ ++counter ] ) { // Create a reader for this particular file var reader = new FileReader(); // Respond to the onloadend event of the reader reader.onloadend = (function(file){ return function(){ var image = new Image(); image.height = 100; image.title = file.name; image.src = /^image/.test(file.type) ? this.result : "t9QlH.png"; document.body.appendChild( image ); } })(file); // Begin reading data for this file reader.readAsDataURL( file ); } } }​

Fiddle: http://jsfiddle.net/jonathansampson/jPTV3/

Detección de funciones

Aunque FileReader está disponible en casi todos los navegadores modernos, aún desea asegurarse de no causar ningún alboroto para los usuarios de los navegadores más antiguos. Antes de usar el FileReader, asegúrese de verificar el objeto de ventana para su presencia:

if ( window.FileReader ) { // Safe to use FileReader }

Corriendo localmente, desde Chrome

Debo señalar que ejecutar esto en una ruta de archivo: /// en Chrome dará como resultado una experiencia interrumpida. De forma predeterminada, las versiones actuales de Chrome no permiten que file: /// páginas accedan a otros archivos. Puede cambiar este comportamiento cargando Chrome con el --allow-file-access-from-files .

Tenga en cuenta que este método solo permitirá el acceso de archivos para la instancia del navegador con el que se abrió. Si desea que este sea el caso para todas las instancias de navegador en el futuro, puede modificar el acceso directo desde su escritorio. Simplemente haga clic derecho en el atajo de Chrome y vaya a propiedades. Luego, agrega la bandera al final del objetivo.

¿Puede alguien darme un ejemplo del uso de la API de FileReader para obtener contenido de un archivo en Chrome?

Parece estar volviendo undefined para mí.

<!doctype html> <html> <script> function handle_files(files) { console.log(files) reader = new FileReader() ret = [] for (i = 0; i < files.length; i++) { file = files[i] console.log(file) text = reader.readAsText(file) //readAsdataURL console.log(text) //undefined ret.push(text) } console.log(ret) // [undefined] } </script> <body> FileReader Test <input type="file" onchange="handle_files(this.files)"> </body> </html>


Mi problema fue que supuse que FileReader era sincrónico. Esta es la forma correcta de hacerlo. Si está en Chrome, este código se debe ejecutar en un servidor (localhost o en un sitio). No funcionará con un archivo local.

<!doctype html> <html> <script> function handle_files(files) { for (i = 0; i < files.length; i++) { file = files[i] console.log(file) var reader = new FileReader() ret = [] reader.onload = function(e) { console.log(e.target.result) } reader.onerror = function(stuff) { console.log("error", stuff) console.log (stuff.getMessage()) } reader.readAsText(file) //readAsdataURL } } </script> <body> FileReader that works! <input type="file" multiple onchange="handle_files(this.files)"> </body> </html>