#node.js #file-upload
Вопрос:
Я хотел бы знать тип файла, полученного с помощью req.файлов в NodeJS. Мне это нужно, потому что загруженный файл должен быть фотографией для хорошей работы приложения. Это не только помогает мне проверить, что это не файл .jpg, так как вы можете сделать файл .txt и изменить расширение.
Форма выглядит следующим образом:
form(class="form add-form space-down" method="POST" enctype="multipart/form-data")
div.title
h1 UPLOAD NEW PROGRESS
div.form-group
label(for="weight") Weight:
input(type="number" name="weight" class="form-control" placeholder="Enter your weight")
div.form-group
label(for="front") Upload a front photo
input(type="file" name="front" accept="image/*")
div.form-group
label(for="from_side") Upload a from side photo
input(type="file" name="from_side" accept="image/*")
div.form-group
label(for="backwards") Upload a backwards photo
input(type="file" name="backwards" accept="image/*")
И дескриптор маршрутизатора следующий для получения загруженных фотографий:
routerProgress.post("/home/upload-progress", (req, res) => {
const front = req.files.front;
const from_side = req.files.from_side;
const backwards = req.files.backwards;
}
Как я могу быть уверен, что спереди, сзади и сзади-это фотографии?
Если у кого-нибудь есть какие-либо идеи, как это сделать, я был бы очень признателен, если бы вы могли мне помочь.
Ответ №1:
Вы можете сделать что-то подобное. Создайте функцию, которая возвращает расширение файла, и вы сможете проверить, является ли это допустимым расширением изображения или нет.
routerProgress.post("/home/upload-progress", (req, res) => {
const front = getFileExtension(req.files.front);
const from_side = getFileExtension(req.files.from_side);
const backwards = getFileExtension(req.files.backwards);
if (front) {
// its an image, do something
}
}
function getFileExtension (filename) {
const allowedFileExt = ['JPEG', 'JPG', 'PNG', 'GIF', 'TIFF', 'PSD', 'PDF']; // you can add as per your requirement
const fileExt = /[^.] $/.exec(filename);
return allowedFileExt.includes(fileExt[0].toUpperCase());
}
Если это так, вам следует использовать mmmagic, он проверяет содержимое файла, а не проверяет только расширение. Попробуйте использовать эту библиотеку, она будет более полезна для вашего варианта использования. Кроме того, взгляните на этот тип изображения пакета npm
Комментарии:
1. это не сработает, у кого-то может быть файл .txt и изменить его на .jpg, он пройдет проверку, но это не фотография.
2. @Gonsa02 Я обновил ответ более конкретной информацией.