繁体   English   中英

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

[英]Uploading files using Multer, without knowing the their fieldname

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

谢谢!

只需使用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 );
        });
    }
};
multer().any();

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

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

有点破解,但与Multer v1.1.0一起使用:

multer().single("undefined")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM