使用数组Expressjs Multer错误处理

时间:2017-02-14 12:17:46

标签: express multer

我使用multer的数组方法作为后期路由的中间件,我试图找出如何从multer选项设置中的fileFilter函数发送错误回调当用户上传的文件组包含至少一个格式错误的文件时,作为flash消息。我当前的fileFilter设置实现了这一点,但我没有将用户发送到带有File Selected is not supported消息的空白页面,而是在寻找一种方法,使用multer作为中间件将其传达给路由。

这是我的过滤器设置:

var upload = multer({
    storage: multerS3({
        s3: s3,
        bucket: options.Bucket,
        contentType: multerS3.AUTO_CONTENT_TYPE,
        acl: options.ACL,
        key: function(req, file, cb){
            var fileNameFormatted = file.originalname.replace(/\s+/g, '-').toLowerCase();
            cb(null, req.user.organizationId + '/' + uploadDate + '/' + fileNameFormatted);
        }
    }),
    fileFilter: function(req, file, cb){
        if(!file.originalname.match(/\.(jpg|jpeg|png|gif|csv|xls|xlsb|xlsm|xlsx)$/)){
            return cb('File Selected is not supported');
        }
        cb(null, true);
    }
});

以下是upload.array('fileUpload', 5) fileUpload的路线,是我的文件输入字段的名称,5是multer文件长度限制功能。

.post(upload.array('fileUpload', 5), function(req, res) {

    //Configure Uploaded S3 File Path strings based on environment for use in DB
    var uploadedFiles = req.files;
    var s3FilePath = [];

    for (var prop in uploadedFiles) {
        console.log(uploadedFiles[prop].key);
        if (app.get('env') === 'production' || app.get('env') === 'staging') {
            s3FilePath = 'https://files.test-site.com/' + uploadedFiles[prop].key;
        } else {
            s3FilePath.push(uploadedFiles[prop].location);
        }
    }

    models.Blog.update({
        blogId: req.body.blogId,
        blogDate: req.body.blogDate,
    }, {
        where: {
            userId: req.user.userId,
            blogId: req.body.blogId
        }
    }).then(function(blog) {
        console.log('This is the blog ' + blog);
        var files = _.map(s3FilePath, function(file) {
            console.log(file);
            return {
                fileName: file,
                blogId: req.body.blogId
            };
        });
        return models.BlogFile.bulkCreate(files);
    }).then(function() {
        res.redirect('/app');
    }).catch(function(err) {
        res.send(err);
        console.log('File Post Error ' + err);
    });
});

0 个答案:

没有答案