12

看完这篇文章: 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)。因此,我事先不知道字段名称是什么。

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

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

谢谢!

4

4 回答 4

23

只需使用 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 );
        });
    }
};
于 2016-06-22T05:05:26.790 回答
3
multer().any();

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

于 2016-01-21T13:35:02.233 回答
0

只需使用 .array('name') 现在您就可以接收与 name 具有相同字段的尽可能多的文件,也可以在您的客户端定义这个 anme 作为参数可以随时发表评论:)

于 2015-10-23T21:23:07.947 回答
0

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

multer().single("undefined")
于 2016-01-07T06:05:42.687 回答