Как узнать тип файла какого-либо файла, загруженного в форме с помощью NodeJS?

#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 Я обновил ответ более конкретной информацией.