2013-12-15 48 views
0

这是我的HTML如何用expressjs上传多个文件?

<form action="/keys/upload" method="post" enctype="multipart/form-data"> 
<ul> 
     <li><label>文件</label><input type="file" name="keys" multiple></li> 
     <li><input type="submit" value="submit"></li> 
</ul> 
</form> 

这是我的把手功能

app.post('/keys/upload',keysRoutes.addKeys); 

var addKeys=function(req,res){ 
    var temppaths=req.files.keys[0].path; 
    console.log(temppaths); 
    res.end(JSON.stringify(temppaths)); 
}; 

这里,如果我上传多个文件,然后req.files.keys[0].path工作正常,但是当我只能上传一个文件,它出错,我必须将其替换为req.files.keys.path。我不知道要上传多少个文件,那我该怎么办?

有时req.files.keys是数组,有时候req.files.keys是对象。

回答

1

在我看来,你应该检查它是一个数组还是一个对象;当它不是一个数组,把它包装成一个:

var paths = req.files.keys || []; 

if (! (paths instanceof Array)) { 
    paths = [ paths ]; 
} 
+0

哦,谢谢,我正在寻找一种方法来判断一个对象是否是一个数组,你给出的方法是简洁的,而方法Object.prototype.toString.call(paths)=='[object Array]'是非常单调乏味的。 – Arnold

+1

另一个可能是'paths.constructor.name ==='Array''。 – robertklep

0

我找到一个方法,我认为我可以使用

var paths=[].concat(paths); 

然后路径将永远是一个数组