如何设置connect-multiparty上传文件的名称?

时间:2017-01-04 12:36:42

标签: javascript node.js express

我有一个页面,我想接受一个文件和3-4个用户输入,我能够使用connect-multiparty中间件实现这一点,但上传文件的名称是带有正确扩展名和上传文件的乱码内容太正确了。

我想实现以下目标

  1. 设置正在上传的文件名称
  2. 如果目标目录
  3. 中存在同名文件,则创建具有不同名称的文件副本
  4. 设置大小的最大限制并限制文件类型。
  5. 我在网上搜索但找不到任何有效的例子。我的完整代码如下

    var express = require('express');
    var router = express.Router();
    var fs = require('fs');
    var multiparty = require('connect-multiparty');
    var multipartyMiddleware = multiparty({
        uploadDir : '../public/uploads'
    });
    
    router.post('/api/user/uploads', multipartyMiddleware, function(req, res) {
    
        var file = req.files.file;
        console.log(file.name);
        console.log(file.type);
        console.log(file);
        console.log(req.body.test);
    
        console.log("The file was saved!");
        res.json({
            success : 1
        });
        return;
    
    });
    
    module.exports = router;
    

2 个答案:

答案 0 :(得分:0)

使用fs.rename()复制后,您必须重命名该文件,或者在node_modules中修改multiparty的源代码。在他们的代码中,他们有一个重命名的功能:

function uploadPath(baseDir, filename) {
  var ext = path.extname(filename).replace(FILE_EXT_RE, '$1');
  var name = randoString(18) + ext;
  return path.join(baseDir, name);
}

我对他们的代码做了一些修改,所以我可以使用它有点像multer:

https://gist.github.com/Edudjr/999c80df952458cc583272a5161b4d08

你会像这样使用它:

var EXT_RE = /(\.[_\-a-zA-Z0-9]{0,16}).*/g;
var options = {
    uploadDir : path.join(__dirname,'../public/images'),
    filename: function(filename, callback){
     var name = filename.replace(EXT_RE, "");
     callback(name+'-YEAH.png');
   }
}
var form = new multiparty.Form(options);

他们强烈建议您将文件保存在临时文件夹中,以防止服务器上出现DoS。

https://github.com/pillarjs/multiparty/issues/64

答案 1 :(得分:0)

您可以轻松访问它,我用它来获取文件名。

 console.log(req.files.uploads.path.split('\\')[1]);

我正在使用Angular上传的内容。