0

我是 Node.js 和 express 框架的新手。
我想创建一个服务来上传文件,如果文件类型是图像,它将在其中显示图像。如果文件不是图像,它应该向用户显示错误消息。我正在使用 multer 上传文件,如果文件扩展名与任何预定义的扩展名不匹配,它将返回 false 以停止上传过程。但不知何故,如果上传停止,它不会将页面重定向到错误页面。
return false 是否停止了整个 POST 过程?如果上传停止,我有什么方法可以显示错误消息?

module.exports=function(app)
{
    var express=require('express');
    var multer=require('multer');
    var path=require('path');
    var fs=require('fs');
    var bodyParser=require('body-parser');
    var done = false;
    var targetPath="";

    app.use(bodyParser.urlencoded({uploadDir: '/uploads',extended:true, keepExtensions:true}));

    app.use(function(req,res,next)
    {
        var handler = multer({ dest: './uploads/',
        rename: function (fieldname, filename) {
        return filename+Date.now();
        },
        onFileUploadStart: function (file) {
        if(file.extension != 'png' && file.extension != 'jpg' && file.extension != 'jpeg' && file.extension != 'gif')
        {   
            done = false;
            return false;
        }
        console.log(file.originalname + ' is starting ...')
        },
        onFileUploadComplete: function (file) {
        console.log(file.fieldname + ' uploaded to  ' + file.path)
        targetPath = file.path;
        done = true;
        }
        });
        handler(req, res, next);
    });

    app.get('/',function (req,res)
    {
        res.render('newindex.jade')
    });

    app.get('/errorpage', function (req,res)
    {
        res.render('errorpage.jade')
    })

    app.post('/uploads', function (req,res)
    {
        if(done = true)
        {
            console.log(req.files);
            //res.end("Image has been uploaded at " + targetPath);
            res.redirect("/" + targetPath);
            targetPath="";
            //res.send('<img src="' + targetPath + '">');
        }       
        else
        {
            res.redirect("./errorpage")
        }
     });

    app.get('/uploads/:file', function (req, res)
    {
        file = req.params.file;
        var img = fs.readFileSync("./" + "/uploads/" + file);
        res.writeHead(200);
        res.end(img, 'binary');
    });

}
4

1 回答 1

0

我认为您可以在 onFileUploadStart() 中添加 req、res 并在“return false;”行之前插入 res.doSomething()。例如:

onFileUploadStart: 函数(文件、请求、资源){

   {   
       done = false;
       res.json({message: "Upload failed"})
       return false;
   }
   console.log(file.originalname + ' is starting ...')
   }
于 2015-03-26T15:21:26.783 回答