С новым файловым API в Javascript вы можете читать файлы в Javascript для создания dataURL, чтобы показывать клиентские фотографии клиентов. Мне интересно, можете ли вы добраться до объекта File в обратном вызове FileReader onload. Я проиллюстрирую это на примере:
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; }
Что я могу сделать - то, что я делаю прямо сейчас, - это обернуть содержимое цикла for в функции и выполнить его для создания новой области и сохранить файл в этой области следующим образом:
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); }
Мне просто интересно... Может, мне что-то не хватает. Есть ли способ получить объект File из встроенной функции FileReader? Оба this
и e.target
- это объект FileReader, а не файл. Есть ли что-то в this
или e
, которое является файлом? Я не могу найти его: (
Спасибо, куча.
PS. Скрипка: http://jsfiddle.net/rudiedirkx/ZWMRd/1/