使用Express和Formidable上传文件 - 检查文件扩展名、移动和删除文件

8
我是一个使用Express 4和Formidable进行文件上传表单开发的人,但遇到了一些问题。
我想要实现的目标是:
-Check if file is selected and extension/format before file is uploaded to the server and abort if not .txt
-Write file "info" to db, copy file from tmp folder to dest. folder and delete tmp file.

我的代码:

app.post('/upload', function(req, res) {
  var form = new formidable.IncomingForm();
  form.uploadDir = path.join(__dirname, '/uploads/tmp');
  form.keepExtensions = true;

  form.on('error', function(err) {
    console.log(err.message);
    req.flash('error', err.message);
    res.redirect('/upload');
  });

  form.on('file', function(name, file){
    var modname = file.path.split('/')[file.path.split('/').length-1]
    var finals = path.join(__dirname, 'uploads/finals/' + modname);
    fs.rename(file.path, finals, function(err){
      if(err) throw err;
    });
    new Input({
      user: req.user,
      name: file.name,
      size: file.size,
      path: finals,
      type: file.type
    }).save(function(err, upload, count){
     if (err){
      console.log(err);
     }
    });

  });

  form.on('end', function (){
    req.flash('info', 'Input file uploaded');
    res.redirect('/upload');
  });

  form.parse(req);
});
  1. 我不确定在哪里检查“如果选择了文件”以及格式并如何检查? 是否可以检查大小 === 0,然后触发错误事件?如果可以,如何做到这一点,或者还有其他方法可以在执行 form.parse 之前检查是否选择了文件?

  2. 这是移动文件的正确方式和正确的事件吗?但是如果“写入数据库”或“移动文件”失败,如何终止?这可以使用异步完成吗?

1个回答

0
使用过滤选项仅保留.txt文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接