blog-web/deploy_utils/list_images.js
2019-10-25 08:49:08 +08:00

53 lines
1.6 KiB
JavaScript

const fs = require('fs')
const path = require('path')
const crypto = require('crypto')
function sortName(item1, item2) {
if(item1.name > item2.name) {
return 1
} else if(item1.name < item2.name) {
return -1
}
return 0
}
/**
* 递归遍历目录中的所有文件
* @param {String} imageFolderPath 文件夹路径
* @param {Array} images 图片列表
* @param {String} rootPath 根路径
*/
function readDirSync(imageFolderPath, images, rootPath, callback, count={fileCount:0, finishCount:0}){
var files = fs.readdirSync(imageFolderPath);
files.forEach(item => {
var fileInfo = fs.statSync(`${imageFolderPath}/${item}`)
if(fileInfo.isDirectory()){
// 该文件是一个目录, 则遍历该目录内容
readDirSync(`${imageFolderPath}/${item}`, images, rootPath, callback, count)
} else {
count.fileCount ++
var stream = fs.createReadStream(`${imageFolderPath}/${item}`)
var fsHash = crypto.createHash('md5')
stream.on('data', data => {
fsHash.update(data)
})
stream.on('end', () => {
count.finishCount ++
images.push({
name: `${imageFolderPath}/${item}`.replace(rootPath, ''),
md5: fsHash.digest('hex')
})
if(count.fileCount === count.finishCount && typeof callback === 'function') {
callback(images.sort(sortName))
}
})
}
})
}
module.exports = function (rootPath, imageFloder, callback) {
readDirSync(path.resolve(rootPath, imageFloder).replace(/\\/g,'/'), [], rootPath, callback)
}