Con la nueva API de archivos en Javascript puede leer archivos en Javascript para crear dataURLs para mostrar clientside imágenes del lado del cliente. Me pregunto si puedes alcanzar el objeto File dentro de la devolución de llamada en onload del FileReader. Voy a ilustrar esto con un ejemplo:HTML5 API del archivo: obtener el objeto de devolución de llamada de archivos dentro de FileReader
var div = document.createElement('div'); div.ondrop = function(e) { e.preventDefault(); e.stopPropagation(); var files = e.dataTransfer.files; for (var i=0; i<files.length; i++) { var file = files[i]; // this is the file I want!! var filereader = new FileReader(); filereader.onload = function(e) { this; // the FileReader object e.target; // the same FileReader object this.result; // the dataURL, something like data:image/jpeg;base64,..... var img = document.createElement('img'); img.src = this.result; img.title = file.fileName; // This won't be working document.appendChild(img); } } return false; }
lo que podría hacer - lo que hago en este momento - es envolver el contenido del bucle for de una función y ejecutarlo para crear un nuevo ámbito de aplicación y mantener un archivo en ese alcance como tal:
for (var i=0; i<files.length; i++) { var _file = files[i]; // this is the file I want!! (function(file) { // do FileReader stuff here })(_file); }
Me preguntaba ... Tal vez me falta algo. ¿Hay alguna forma de obtener el objeto File desde la función onload del FileReader? Ambos this
y e.target
son el objeto FileReader y no el archivo. ¿Hay algo en this
o e
que sea el archivo? Yo no lo encuentro :(
gracias un montón
PS un violín:... http://jsfiddle.net/rudiedirkx/ZWMRd/1/
Esto es lo que uso ahora (y han estado utilizando durante un tiempo): http://js1.hotblocks.nl - el javascript: http://js1.hotblocks.nl/tests/ajax/fdd.js - Todavía estoy usando el código en mi respuesta. Y funciona. Sin el (feo) cierre. (Se comenta con '//'.) – Rudie
Si le gusta Javascript, puede utilizar (cualquier parte de). Tengo curiosidad sobre cómo los webworkers pueden desempeñar un papel en esto (utilizar webworkers para las devoluciones de carga de imagen para leer y mostrarlas antes de cargarlas) – Rudie
Me perdí la asignación de 'filereader.file = file;'. Gracias por señalar esta solución –