使用 Multer 上传文件,不知道他们的字段名

Uploading files using Multer, without knowing the their fieldname

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

我发现当您不知道要上传的表单字段的名称时,Multer 过去允许上传文件。例如,如果您查看文章的 "using Multer" 部分,您会发现作者在调用 app.use()。如果您使用当前版本的 Multer 执行此操作,您将收到错误 TypeError: app.use() requires middleware functions.

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

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

或者,在网上找到 Multer 的完整指南一直是一个挑战,因为最好的指南似乎是 GitHub 存储库的自述文件,而似乎缺少那个。也许我正在寻找的答案会在某处的指南中。

谢谢!

只需使用 .array('name') 现在您可以接收尽可能多的文件,这些文件具有与名称相同的字段,还在您的客户端将此 anme 定义为参数我正在使用相同的方法并且它工作得很好如果您还有任何疑问,请随时发表评论:)

有点破解,但适用于 Multer v1.1.0:

multer().single("undefined")
multer().any();

没有测试过,但应该可以。

只需使用 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 );
        });
    }
};