Node: проверяем, пуст ли файл или каталог

Вступление

Веб-приложения обычно получают пользовательские данные в той или иной форме, а при любом вводе важна проверка. Проверка, содержат ли поля формы допустимые данные или нет, – первое, о чём вы должны подумать.

Когда пользователь загружает файлы, вам нужно будет проверить, пустые ли эти файлы, а не только существуют они или нет. Кроме того, поскольку Node поддерживает разработку на стороне сервера и может работать с файловой системой, вы поймёте, что постоянно работаете с файлами и каталогами, особенно если вы создаете приложение CLI.

В этом гайде мы рассмотрим, как проверить, пуст ли файл или каталог, используя Node.js.

Примечание: эту задачу можно решить двумя способами – получить файл из интерфейса и проверить, либо работать с файловой системой независимо от потенциально несуществующего интерфейса. Мы рассмотрим оба решения.

Проверьте, выбран ли файл с помощью JavaScript

JavaScript не подходит для проверки, является ли файл пустым, поскольку он может проверить, прикреплен ли файл к форме, но обработать сам файл не может.

Начнем с того, что проверим, выбран ли файл из файловой системы и прикреплен ли он к форме. Давайте создадим простую форму в интерфейсе:

<!DOCTYPE html>
<html lang="en">
<head>
    <!-- Meta tags -->
</head>
<body>
    <form enctype="multipart/form-data">
    	<input type="file" name="file" id="file">
    	<button type="submit" onclick="checkFile()">Submit</button>    
    </form>
        
    <script src="script.js"></script>
</body>
</html>

Страница содержит <form>, которая принимает multipart через <input type=”file”>. Как только мы запустим, появится следующее:

function checkFile() {
    let fileInputField = document.getElementById("file");
    if (fileInputField.files.length == 0) {
        alert("Please select a file!")
    }
}

Мы получаем наш элемент input с помощью document.getElementById() и проверяем длину свойства files, которое имеет input типа file. Если он пуст, мы уведомляем пользователя о том, что файл не выбран.

Как только мы убедимся, что пользователь загрузил какой-то файл, мы сможем проверить, пустой ли он.

Модуль fs

Node.js – это среда выполнения JavaScript, которая выполняет код JavaScript вне браузера. Она даёт нам возможность взаимодействовать также с операционной системой и файловой системой. Встроенный модуль fs (файловая система) в этом случае творит чудеса.

Будем полагаться на методы fs.ReadFile() и fs.readdir().

Проверьте, пуст ли файл с Node.js

Как только пользователь отправил вам файл, проверяем его.

Самый простой способ проверить – это передать данные в файл и проверить его длину. Если файл весит 0 байт, то файл пуст:

router.post('/upload', function(req, res) {
	const fs = require('fs');
	const multiparty = require('multiparty');
	let form = new multiparty.Form();
	form.parse(req, function(err, fields, files) {
		let file = files.keySelect[0];
		fs.readFile(file, function(err, data) {
			if (data.length == 0) {
				return res.status(422).json({message : "File is empty! Unprocessable Entity."});
			}
		})
	});
	return res.status(200).json({message: "Success"});
});

Мы использовали модуль multiparty для того, чтобы получить файл из формы, однако этот шаг можно выполнить и с другими различными библиотеками. Например, Multer или Formidable.

С помощью multiparty мы создаём экземпляр формы и анализируем его, передавая req, который включает formData, отправленные с интерфейса. Метод keySelect() возвращает все файлы, отправленные через форму, но, поскольку наша форма принимает только один, и мы ожидаем только один, мы обращаемся к нему через [0]. Используя метод fs.ReadFile(), мы читаем файл и распаковываем его данные. Если эти данные имеют длину 0 – файл пуст, и мы выводим ошибку 422.

Проверьте, пуст ли каталог с помощью Node.js

Мы можем использовать метод readDir():

fs.readdir(directoryName, function(err, data) {
	if (data.length == 0) {
		console.log("Directory is empty!");
	} else {
		console.log("Directory is not empty!");
	}
})

Эти два метода полностью эквивалентны по синтаксису (за исключением названия метода), поэтому все, что относится к одному, относится и к другому. Если данные каталога равны 0, он пуст.

Заключение

Работа с файлами – обычное дело для проектов Node. Вы захотите проверить, пусты они или нет.

В этом гайде мы рассмотрели, как проверить, пуст ли файл или каталог с помощью Node.js .

Ответить