Для того, чтобы показывать миниатюры изображений, выбранных соответствующим полем формы, можно использовать возможности FileReader
, при помощи метода readAsDataURL()
кодируя изображение. Проблема в том, что процесс чтения и кодирования достаточно длителен, отчего выбор нескольких больших фотографий может привести к длительному зависанию вкладки, в которой исполняется скрипт. Пример использования этого способа в файле t0-dataURL.html
.
Гораздо быстрей будут генерироваться ссылки на файлы при помощи createObjectURL()
, который достаточно широко поддерживается. Этот способ реализован в файле t1-objectURL.html
. Сгенерированные ссылки на выбранные файлы указываются в атрибуте src
миниатюр, которые при помощи стилей уменьшаются до требуемого размера. Таким образом, изображения уменьшаются браузером, что сильно замедляет его работу при выборе больших изображений.
Чтобы облегчить браузерную участь, можно отрисовать миниатюру на заранее уменьшенном холсте. Отрисовка займёт немного дополнительного времени, но оно окупится в процессе дальнейшей работы. Пример в t2-canvas.html
.
Рекомендую эту статью, подробно раскрывающую возможности работы с файлами на клиенте.
Если браузер пользователя не поддерживает какую-то из используемых технологий, скорее всего можно использовать Флеш. Но, мне кажется, лучше просто отказаться от этой возможности и выводить название файла, ведь ОС пользователя и так покажет миниатюру в интерфейсе выбора файла.
Иногда миниатюры генерируют на сервере, возвращая их клиенту. Думаю, этот способ не очень хорош необходимостью в любом случае закачивать изображение, которое может быть довольно большим.