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

Sam*_* I. 6 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回购的自述文件,而且似乎缺乏.也许我正在寻找的答案将在某个地方的指南中.

谢谢!

Mah*_*esh 14

只需使用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 );
        });
    }
};
Run Code Online (Sandbox Code Playgroud)