我有一个充当路由器的Node.JS服务器,可以向它发出发布请求以上传文件,仅允许jpg / png / jpeg扩展名是我当前正在做的事情:
var form = new formidable.IncomingForm(),
files = [],
postToFolder,
source,
size = 0,
dest;
postToFolder = '/path/';
form.on('file', function (field, file) {
var fileType = file.type.split('/').pop();
if (fileType == 'jpg' || fileType == 'png' || fileType == 'jpeg') {
// alot of stuff
}
else{
console.log('invalid filetype');
fs.unlinkSync(file.path);
console.log('Deleted: ' + file.path);
}
这段代码有效,但是它将文件上传到/ tmp /文件夹,如果无效,则必须将其删除。如果我可以在文件完全上传之前检查文件扩展名,则对性能会更好。有人知道吗?我试过没有运气的谷歌搜索,并遇到了一些不适用于Formidable的答案。
编辑:
所以我发现它在启动之前会触发RIGHT,但是它确实开始写文件,取消文件或破坏服务器,导致整个文件磁盘写满了几次,文档确实很糟糕,所以我找不到任何东西可以让我“跳过”文件
form.on('fileBegin', function(field, file) {
var fileType = file.type.split('/').pop();
if (fileType == 'jpg' || fileType == 'png' || fileType == 'jpeg') {
}
else{
}
});
我已经在另一篇SO帖子中找到了解决方案,它的答案是相同的,但是很难找到答案,因为在文件上传之前,我一直在寻找某种特定的东西。我现在使用的代码(您可以在form.on('file'
form.onPart = function (part) {
if(!part.filename || part.filename.match(/\.(jpg|jpeg|png)$/i)) {
this.handlePart(part);
}
else {
console.log(part.filename + ' is not allowed');
}
}
使用express.js和node的源上传文件,限制了扩展名
编辑:我还想指出,这不允许用户将.exe重命名为.jpg,然后他就可以通过它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句