С новым API-интерфейсом файлов в Javascript вы можете читать файлы в Javascript для создания dataURL для отображения клиентских фотографий клиентов. Мне интересно, можете ли вы добраться до объекта File в обратном вызове FileReader onload. Я проиллюстрирую это на примере:API-интерфейс HTML5: получить объект File в обратном вызове 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; }
Что я мог сделать - то, что я делаю сейчас - это обернуть содержимое для цикла в функции и выполнить его, чтобы создать новую область и сохранить файл в таком объеме:
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? Оба и e.target
являются объектом FileReader, а не файлом. Есть ли что-то в this
или e
, что является файлом? Я не могу найти его :(
Благодаря кучу
PS скрипку:... http://jsfiddle.net/rudiedirkx/ZWMRd/1/
Это то, что я использую сейчас (и использовал некоторое время): http://js1.hotblocks.nl - javascript: http://js1.hotblocks.nl/tests/ajax/fdd.js - Все еще использую код в своем ответе. И это работает. Без (уродливого) закрытия. (Он комментируется с помощью '//'.) – Rudie
Если вам нравится Javascript, вы можете использовать (любую его часть). Мне любопытно, как веб-пользователи могут сыграть определенную роль в этом (используйте webworkers для обратных вызовов загрузки изображений, чтобы их читать и отображать перед загрузкой) – Rudie
Я пропустил назначение 'filereader.file = file;'. Спасибо, что указали это решение –