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 .