引入依赖
const fs = require('fs');
const path = require('path')
const { exec } = require('child_process');
封装函数
function showDiskLetter(callback) {
var wmicResult = '';
var command = exec('wmic logicaldisk get Caption,FileSystem', function(err, stdout, stderr) {
if(err || stderr) {
console.log("root path open failed" + err + stderr);
callback(null);
return;
}
wmicResult = stdout;
});
command.stdin.end();
command.on('close', function(code) {
var data = wmicResult.trim().split('\n');
data.shift();
for (let i = data.length - 1; i >= 0; i--) {
let cap = data[i].trim().split(/\s+/g);
if (cap.length < 2) {
data.splice(i, 1);
} else {
data[i] = cap[0];
}
}
data.reverse();
callback(data);
});
}
function mapDirChild(dir, typeArr, finish) {
if (Object.prototype.toString.call(typeArr) !== '[object Array]') {
throw new Error('typeArr不是Array')
}
const isEmpty = typeArr.length === 0;
fs.readdir(dir, function(err, files) {
if (err) {
finish && finish(null);
return;
}
let arr = [], n = 0, lastNum = files.length - 1;
files.forEach(function(filename, index) {
let pathname = path.join(dir, filename);
let suffix = filename.substring(filename.lastIndexOf('.') + 1).toUpperCase();
fs.stat(pathname, (err, stats) => {
if (!err && stats.isFile() && (isEmpty || (suffix && typeArr.indexOf(suffix) > -1))) {
arr.push(pathname);
}
if (n === lastNum) {
finish && finish(arr);
}
n++;
});
});
});
}
function querySources (types, callback, basePath) {
const base = basePath || '/localvideo';
let typeArr = null;
if (!types) {
typeArr = [];
} else if (Object.prototype.toString.call(types) === '[object Array]') {
typeArr = types.slice();
for (let i = 0; i < typeArr.length; i++) {
typeArr[i] = typeArr[i].toString().toUpperCase();
}
} else if (typeof types === 'string') {
typeArr = types.replace(/\s+/g, '').toUpperCase().split(',');
} else {
typeArr = types.toString().replace(/\s+/g, '').toUpperCase().split(',');
}
showDiskLetter(function (data) {
if (!data) {
data = ['K:', 'J:', 'I:', 'H:', 'G:', 'F:', 'E:', 'D:', 'C:'];
}
if (data.length === 0) {
typeof callback === 'function' && callback([]);
return;
}
let i = 0, len = data.length;
let mapBack = function (arr) {
if (arr) {
typeof callback === 'function' && callback(arr);
} else {
i++;
if (i === len) {
typeof callback === 'function' && callback([]);
return;
}
mapDirChild(data[i] + base, typeArr, mapBack);
}
};
mapDirChild(data[i] + base, typeArr, mapBack);
});
}
使用方法
querySources(' mp 4 , wmv, pdf', function (data) {
console.log('处理资源路径', data);
}, '/myvideos');
querySources(['mp4', 'pdf', 'txt'], function (data) {
console.log('处理资源路径', data);
});
querySources('', function (data) {
console.log('处理资源路径', data);
});