Ради Аллаха, возьмите библиотеку multiparty, там же может быть много файлов в одной форме и много файлов даже в одном файловом поле. Там сложный формат, MIME, нельзя просто писать все в стрим. Все это нужно парсать https://www.npmjs.com/package/multiparty примеры там есть.
В данном модуле нельзя прервать загрузку к примеру если файл не правильной высоты или ширины, так же нельзя проверить эту высоту или ширину, короче главный минус то, что в любом случае загрузка будет произведена
Ни в каком случае невозможно прервать загрузку. Чтобы понять, какой высоты и ширины файл - его нужно загрузить, раскодировать, проанализировать, положить на диск или в память для временного хранения. Если он не подходит - выкинуть и просить у пользователя другой.
Ну в php то такое возможно, вот я и подумал может и в nodejs так же можно. Тогда другой вопрос, как сделать загрузку файла на сервер не прибегая ко всяким модулям типа multiparty ?
В php можно проверить перед загрузкой файла например его размер
filesize( $_FILES['file']['tmp_name'] ) > 1024 * 2 * 1024
и остановить загрузку
return false;
getimagesize только после загрузки, ее уже нельзя будет отменить. Метод через filesize, который Вы указали выше, работает тоже уже после загрузки. А то, что Вам кажется отменой - это просто не перекладывать файл из временной папки в свою. Загрузку файла это не прерывает. А о чем говорю я - так загрузку действительно можно отменить посередине, если отпарсить частичные MIME заголовки, пока файл качается. И то, только по размеру и типу файла. Его разрешения в пикселях из частичных MIME заголовков не взять. Этот метод можно сделать в node.js и нельзя сделать в PHP ни как. Но это сложно, готового решения для этого нет, парсать MIME нужно будет вручную, учитывая, что он может быть порванным в любом месте. Не парьтесь, используйте модуль мультипарти или попробуйте узнавать о картинке все необходимое еще на стороне браузера, через HTML5 API.
Да вы правы, файл загружается во временную папку на сервере, но главное что он не попадает в папку с сайтом. В браузере я все проверяю, просто хотелось сделать еще проверку на сервере, так как старые браузеры не понимают HTML5 и пользователь может выключить JS
В принципе самый удобный вариант это использовать старую версию express в ней еще есть фалы в req.body, в последней же версии express почему то в req.body видны только текстовые поля
А чем multiparty не подходит? Парсайте, потом кладите все во временную папку или проверяйте прямо из буферов памяти, как удобнее и если не подходят файлы - выбрасывайте их. Ничего сложного.