С новым файловым 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/