看完这篇文章后: 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回购的自述文件,而且似乎缺乏。也许我正在寻找的答案将在某个地方的指南中。
谢谢!
答案 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")