Как определить максимальный размер загруженного файла и разрешенные типы файлов в NodeJS restify bodyParser?

#node.js #restify

#node.js #restify

Вопрос:

Я новичок в node.js . Я уже сделал, чтобы загрузить файл изображения на сервер Rest с помощью модуля Restify. но теперь мне нужно убедиться, что размер моего загруженного файла изображения и разрешенные типы файлов в bodyParser restify.

мой код restify:

 var restify = require('restify'),
    fsEx = require('fs-extra'),
    md5 = require("md5"),
    path = require("path");

var server = restify.createServer({
    name: 'Photo Upload api server'
});

server.use(restify.bodyParser({
    maxBodySize: 2,
    mapParms: true,
    mapFiles: true,
    keepExtensions: true
}));


server.post('/resized', function(req, res, next) {

    var tempPath = req.files.photos.path;
    var getFileExt = path.extname(tempPath);
    var finalFileName = Date.now()   getFileExt;
    var finalImgPath = __dirname   "/uploads/"   finalFileName;

    fsEx.move(tempPath, finalImgPath, function(err) {

        if (err) {
            return console.error(err);
        }


    });

    console.log('result FinalImage = ', finalImgPath);

    res.end('image resized');
    next();
});
  

Ответ №1:

 const maximumImageSize = 1 * 1024 * 1024;
const allowedImageFormats = ['.png', '.jpg', '.jpeg'];

const isValidImageFormat = (extension) => _.includes(allowedImageFormats, _.toLower(extension));
const isValidImageSize = (size) => size < maximumImageSize;

const imageExtension = path.extname(file.name);
if (!isValidImageFormat(imageExtension)) {
    return next(new restify.errors.ForbiddenError('Invalid image format.'));
}

const imageSize = Number(req.headers['content-length']);
if (!isValidImageSize(imageSize)) {
    return next(new restify.errors.ForbiddenError('Image is too big.'));
}
  

Комментарии:

1. хорошая идея, но content-length это не размер изображения, это размер тела.

2. Верно. Этот код взят из проекта, в котором конечная точка загрузила только одно изображение, поэтому в этом случае он работает. Но вы правы, если тело содержит больше, чем изображение, нужно сделать что-то еще.