2016-09-30 51 views
0

我是node.js中的新手。我已經使用Restify模塊將圖像文件上傳到Rest服務器。但現在,我需要確保我上傳的圖像文件大小&允許bodyParser restify中的文件類型。如何在NodeJs中定義最大上傳文件大小和允許的文件類型restify bodyParser?

我的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(); 
}); 

回答

0
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.')); 
} 
+0

想法不錯,但'內容length'不是圖像的大小,它的車身尺寸。 – Kostanos

+0

是的。此代碼來自端點僅上載單個圖像的項目,因此在這種情況下它可以正常工作。但是你是正確的,如果身體包含的不僅僅是圖像,還需要做其他事情。 –