自用七牛上传下载

自用nodejs版七牛上传下载功能

Blog
GitHub下载
list
get
upload

自用功能

自动对比服务器文件上传,
自动获取服务器文件下载,
获取服务器上所有文件

依赖模块

  • npm install qiniu
  • npm install request
  • npm install underscore

JS中最下方的初始化

1
2
3
4
5
AK: 你的七牛AK,
SK: 你的七牛SK,
path: 需要同步文件夹以当前文件夹下的文件夹,非绝对路径如:"/uploadQN"指的是当前文件夹下的uploadQN,
bucket: 你的七牛空间,
domain: 你的七牛CDN域名 用来下载

指令

目前仅仅支持get,list,upload

get

1
nodejs uploadQN.js get

获取目录下的所有文件以及文件夹

list

1
nodejs uploadQN.js list

获取服务器上的所有文件

upload

1
nodejs uploadQN.js upload

上传同步文件夹下的所有文件至服务器


学习笔记

本次写这个小功能遇到最大的障碍就是nodejs中的异步循环获取目录
比如你的文件夹目录结构为

  • upload
    – imgs
    — xxx.png
    – mm
    — imgs
    —- xxx.png

需要做的事情为递归遍历同步文件夹=>异步判断文件是否为文件=>如果是文件夹=>再次递归循环
递归来递归去很容易调入一个坑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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)
}