自用七牛上传下载
自用nodejs版七牛上传下载功能
自用功能
自动对比服务器文件上传,自动获取服务器文件下载,获取服务器上所有文件
依赖模块
- npm install qiniu
- npm install request
- npm install underscore
JS中最下方的初始化
AK: 你的七牛AK,
SK: 你的七牛SK,
path: 需要同步文件夹以当前文件夹下的文件夹,非绝对路径如:"/uploadQN"指的是当前文件夹下的uploadQN,
bucket: 你的七牛空间,
domain: 你的七牛CDN域名 用来下载
指令
目前仅仅支持get,list,upload
get
nodejs uploadQN.js get
获取目录下的所有文件以及文件夹
list
nodejs uploadQN.js list
获取服务器上的所有文件
upload
nodejs uploadQN.js upload
上传同步文件夹下的所有文件至服务器
学习笔记
本次写这个小功能遇到最大的障碍就是nodejs中的异步循环获取目录比如你的文件夹目录结构为
- upload– imgs— xxx.png– mm— imgs—- xxx.png
需要做的事情为递归遍历同步文件夹=>异步判断文件是否为文件=>如果是文件夹=>再次递归循环递归来递归去很容易调入一个坑
getDir: function (cb) {
var path = node_path.join(__dirname, dir_path)
var dirs = [];
//用来存储最后获得的目录
var over_dir=[];
//获取存储最后获得的文件
var over=[];
//初始化
dirs.push(path);
function forFiles(files, file_path) { // 循环目录下所有文件
var fixdir = [];
var arrlength=files.length;
files.forEach(function (e, i) {
var e = node_path.join(file_path,e);
fs.stat(e, function (err, stat) {
arrlength--
if (stat.isDirectory()) { // 为目录则给over_dir添加目录
fixdir.push(e)
over_dir.push(e)
}else{ // 给over添加文件
over.push(e)
};
if(arrlength==0){
if(file_path==over_dir[over_dir.length-1]){ // 当次循环的目录是否等于over_dir的最后一个目录
cb(over,over_dir)
}
if(fixdir.length>0){ //如果获取到文件夹
forDir(fixdir)
}
}
/* if (i == files.length - 1) { // 当次循环目录结束
}*/
})
})
}
function forDir(dirs) {
dirs.forEach(function (e, i) {
fs.readdir(e, function (err, files) {
forFiles(files,e)
})
})
}
forDir(dirs)
}