Ага, учитывая процент аудитории IE+Safari, то это все полезно только теоретически. Еще обязательно нужно добавить превью файлов с помощью canvasGL, чтобы к статье можно было смело дописать тег «экзотика»
Полагаю, что ближайшие 5 лет я продолжу пользовать в проектах qq.FileUploader и не париться, а подобные публикации пропускать.
Боюсь что, подавляющее большинство возможностей т.н. html5 придется еще долгое время игнорировать, а когда они либо сдохнут либо получат полноценные спецификации и поддержку со стороны браузеров, ну да, потрачу аж 15 минут на изучение.
Края не имеют значения, важна аудитория, если она у вас блика к меилсрушечке, то ваше решение будет поддерживаться только у 1/5 пользователей.
По данным tx3, хотя они и несколько смещенные, но рунет отображают неплохо, чуть лучше, заработает где-то 1/3 пользователей.
Пользователь не станет ставить другой браузер, чтобы посетить ваш сайт. И возвращаться если что-то не заработало тоже вряд ли будет.
Впрочем, я не знаю зачем я тут все это пишу. Ваш проект — ваши проблемы.
Конечно. Однако я тут нигде не писал, что нужно использовать только это решение(а даже намекал на обратное). Например, в связке с флешем всё будет отлично работать.
Значит в сафари нельзя ниче сделать, как и в ИЕ, но сафари рассматриваем :)
А вообще способ для сафари подходит для любого браузера, даже для ИЕ.
Писал статью как-то www.clearboth.ru/article/ajax-image-preview-before-upload.html
Код сыроват, но работает.
По рабочим задачам делали подобное. Для неподдерживаемых браузеров сделали fallback во флеш. На гитхабе сейчас сырая версия, в проекте лежит доработанная, как руки дойдут — обязательно выложим. Честно честно.
А как же это: "… Метод readAsDataURL() объекта FileReader принимает параметром объект File и запускает чтение данных из него. В результате для всех выбранных через стандартное поле или перетащенных прямо в браузер картинок, мы видим их миниатюры (искусственно уменьшенные до 150 пикселей)..."?
// Создаем объект FileReader и по завершении чтения файла, отображаем миниатюру и обновляем
// инфу обо всех файлах
var reader = new FileReader();
reader.onload = (function(aImg) {
return function(e) {
aImg.attr('src', e.target.result);
aImg.attr('width', 150);
log('Картинка добавлена: `'+file.name + '` (' +Math.round(file.size / 1024) + ' Кб)');
imgCount++;
imgSize += file.size;
updateInfo();
};
})(img);
Да, конечно, я так и делал. Но отсылать на сервер файл в виде строки, да ещё закодированной? В принципе, в моей статье описывается решение одной проблемы: как данные миниатюры отправить так, чтобы на сервере можно было их легко получить и сохранить(например, используя массив $_FILES).
Теоретически интересно. На практике, если у вас внезапно потребуется другой тип миниатюр или их размер изменится на один пиксель придется все таки делать пережималку на сервере, а если она есть, то зачем все эти нестабильные пляски на клиенте?
Не согласен. Я столкнулся с этой проблемой в реальной задаче. А так как переплачивать за хостинг мне не хотелось, то я решил перенести затраты оперативы на клиент. Правда, в той задаче я использовал flash, но подход тот же.
Загрузчик изображений и миниатюр. Новые стандарты, старые проблемы