You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
1.8 KiB
JavaScript
99 lines
1.8 KiB
JavaScript
async function getList (ftp, src) {
|
|
return new Promise(resolve => {
|
|
ftp.list(src, (err, list) => {
|
|
if (err) {
|
|
console.error(err)
|
|
|
|
resolve(false)
|
|
} else {
|
|
resolve(list)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
async function rmDir (ftp, src, recusive = true) {
|
|
return new Promise(resolve => {
|
|
ftp.rmdir(src, recusive, err => {
|
|
if (err) {
|
|
console.error(err)
|
|
|
|
resolve(false)
|
|
} else {
|
|
resolve(true)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
async function deleteFile (ftp, src) {
|
|
return new Promise(resolve => {
|
|
ftp.delete(src, err => {
|
|
if (err) {
|
|
console.error(err)
|
|
|
|
resolve(false)
|
|
} else {
|
|
resolve(true)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
async function emptyDir (ftp, src, except = []) {
|
|
const list = await getList(ftp, src)
|
|
|
|
for (let i = 0, listNum = list.length; i < listNum; i++) {
|
|
const { type, name } = list[i]
|
|
|
|
if (type === 'd' && (name === '.' || name === '..')) continue
|
|
if (except.find(n => n === name)) continue
|
|
|
|
const fullSrc = `${src}${name}`
|
|
|
|
if (type === 'd') {
|
|
if (!await rmDir(ftp, fullSrc, true)) return false
|
|
} else {
|
|
if (!await deleteFile(ftp, fullSrc)) return false
|
|
}
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
async function put (ftp, src, dest) {
|
|
return new Promise(resolve => {
|
|
ftp.put(src, dest, err => {
|
|
if (err) {
|
|
console.error(err)
|
|
|
|
resolve(false)
|
|
} else {
|
|
resolve(true)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
async function mkDir (ftp, src, recusive = true) {
|
|
return new Promise(resolve => {
|
|
ftp.mkdir(src, recusive, err => {
|
|
if (err) {
|
|
console.error(err)
|
|
|
|
resolve(false)
|
|
} else {
|
|
resolve(true)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
module.exports = {
|
|
put,
|
|
rmDir,
|
|
mkDir,
|
|
getList,
|
|
emptyDir,
|
|
deleteFile
|
|
} |