如何做好上传与node.js的快递(How to do upload with express in

2019-07-17 13:56发布

我的代码是这样的:

app.configure(function () {
    app.use(express.static(__dirname + "/media"));
    app.use(express.bodyParser({
          keepExtensions: true
    }));
})

app.post('/upload', function (req, res) {
    console.log(req.files);

    res.send("well done");
    return;
})

蚂蚁做了一些工作,如:

在1.Do成才progoress事件,我怎么可以绑定处理的progresscomplete事件,我已经试过req.files.on('progress', fn)但它不工作

2我知道如何使用req.files获取文件的imformation,但我怎么能限制上传文件的大小上传之前,或限制上传的图像分辨率?

Answer 1:

你应该看看多中间件的文档 ,这是参与文件上传之一。

它说,限制通过“限制”选项设置和进步,可以听,如果你把“延迟”选项设置为true。 在这种情况下由上载所使用的形式被设置为您的请求的属性。 然后,你就可以听的进展情况 。

所以,你的代码应该是这样的(未测试):

app.configure(function () {
    app.use(express.static(__dirname + "/media"));
    app.use(express.bodyParser({
          keepExtensions: true,
          limit: 10000000, // 10M limit
          defer: true              
    }));
})

app.post('/upload', function (req, res) {
    req.form.on('progress', function(bytesReceived, bytesExpected) {
        console.log(((bytesReceived / bytesExpected)*100) + "% uploaded");
    });
    req.form.on('end', function() {
        console.log(req.files);
        res.send("well done");
    });
})


Answer 2:

我在我的项目中加载文件的功能,可以帮助你一下:

var app = express.createServer(
    express.bodyParser({uploadDir: "public/files", keepExtensions: true})
  , express.cookieParser()
  , express.session({ secret: 'keyboard cat' })
);

app.post('/upload', function (req, res) {
var msg = '';
var img = '';

//console.log("type: "+req.files.image.type);
//console.log("size: "+req.files.image.size);

if(req.files.image.type != 'image/png' && req.files.image.type != 'image/jpeg' && req.files.image.type != 'image/gif')
{
    msg = 'Invalid format, accepts only: jpg, png and gif.<br/>';
}

if(req.files.image.size > 307200) // 300 * 1024
{
    msg += 'File size no accepted. Máx: 300kb.<br/>';
}

if(msg == '')
{
    if(diff > 0)
    {
        name = name.substring(name.length-diff, name.length);
    }

    var date = new Date();
    var name = req.files.image.name;
    var diff = name.length - 20;
    var rnd_number = Math.floor(Math.random()*101);
    var new_name = date.format('yyyymmdd_HHMMssl_') + rnd_number +'_'+ name;

    fs.renameSync(req.files.image.path, 'public/files/img'+new_name);

    img = '<img src="public/files/img/'+new_name+'" width="100%"/>';
}

res.render('admin/upload', {layout: false, img: img, msg: msg});

})


文章来源: How to do upload with express in node.js