Можно еще проще.. Используйте JS FileReader (это встроенное WEB API JavaScript)
https://developer.mozilla.org/ru/docs/Web/API/File...
У вас есть форма отправки , фишка в том, что пользователь может загружать картинки и если передумает отправить пост, картинки не попадут на сервер, пока не будет сабмита. Но он их может видеть.
Процесс очень прост:
1. Пользователь что то пишет (или не пишет)
2. В инпут=file загружает картинку, она через FileReader считывается в base64 (FileReader может и валидировать их mime/types и размер!)
3. Создаете временный тег img ( document.createElement('img').src = ) или input=hidden с хэшом картинки... или и то и другое , чтобы показать ему картинку моментально и затем при отправке сохранить...
4. При нажатии сабмита - сохраняете форму. Данные в базу или куда то... а картинку читаете из потока input
php.net/manual/en/wrappers.data.php (для PHP пример)
5. Создаете новый пустой файл и пишете в него поток
Итого: картинок юзер может накликать хоть 100 штук и думать что они загрузились, но сохраняться они только когда форма обработается