使用Multer上传文件,而不知道他们的fieldname

时间:2015-08-07 15:16:32

标签: javascript node.js express multer

看完这篇文章后: http://lollyrock.com/articles/express4-file-upload/

我已经意识到当你不知道正在上传的表单字段的名称时,Multer曾经允许上传文件。例如,如果你看看"使用Multer"在文章的这一部分,您会看到作者在调用.single()时不使用.array().fields()app.use()。如果您使用当前版本的Multer执行此操作,则会收到错误TypeError: app.use() requires middleware functions

虽然我对如何使用.single().array().fields()有一点了解,但我当前的项目要求我将非特定数量的文件发送到我的服务器(可能是一系列.png.log个文件。因此,我事先不知道字段名称是什么。

使用文章(0.1.6)中使用的Multer版本很容易做到这一点,但在当前版本的Multer(1.0.3)中尝试它时似乎不可能,因为您需要指定表单字段名。

或者,在线查找Multer的完整指南一直是一个挑战,因为最好的一个似乎是GitHub回购的自述文件,而且似乎缺乏。也许我正在寻找的答案将在某个地方的指南中。

谢谢!

4 个答案:

答案 0 :(得分:13)

只需使用multer.any(),然后在request.files中获取这些文件。

var router   = express.Router();
var app      = express();    
var _fs      = require("fs");
var _config  = require("./config");
var multer   = require("multer");
var upload   = multer({ dest: _config.tempDir })

app.use(bodyParser.urlencoded({extended:true}));

app.post("/api/files", upload.any(),  function(req, res){             
    var files = req.files;
   if(files){
        files.forEach(function(file){

            //Move file to the deployment folder.
            var newPath =  _utils.DetermineFileName(file.originalname, _config.destinationDir);
            _fs.renameSync(file.path, path.join(_config.destinationDir, newPath));
            var newFileName = path.basename(newPath);
            console.log(newFileName + ' saved at '  + _config.destinationDir );
        });
    }
};

答案 1 :(得分:2)

multer().any();

没有经过测试,但它应该有效。

答案 2 :(得分:0)

只需使用.array(' name')现在您可以接收尽可能多的具有相同字段名称的文件,并在客户端定义此anme作为参数我使用相同的方法并且它完全有效如果仍然有任何查询,你可以随时评论:)

答案 3 :(得分:0)

有点破解,但可以使用Multer v1.1.0:

multer().single("undefined")