1 | const path = require('path')
|
2 | const fs = require('fs')
|
3 | const chalk = require('chalk')
|
4 |
|
5 | const inquiry = require('./lib/inquiry')
|
6 | const strike = require('./lib/strike')
|
7 | const upload = require('./lib/upload')
|
8 | const refresh = require('./lib/refresh')
|
9 |
|
10 | const home = require('user-home')
|
11 | const keyDir = path.resolve(home, './.qiniu')
|
12 | const keyFile = path.resolve(home, './.qiniu/key.json')
|
13 |
|
14 | function readFiles(srcDir, rootDir, ext) {
|
15 | let files = []
|
16 | let names = []
|
17 | let loop = (function loop(src) {
|
18 | let dirs = fs.readdirSync(src)
|
19 |
|
20 | for (let temp in dirs) {
|
21 | let dir = path.join(src, dirs[temp])
|
22 | let stat = fs.statSync(dir);
|
23 |
|
24 | if (stat.isFile() &&
|
25 | (!(new RegExp((ext || '\\.\\*') + '$').test(dirs[temp])))) {
|
26 | files.push(dir = dir.replace(/\\/g, '\/'))
|
27 | names.push(dir.replace(new RegExp('^.*/' + rootDir + '/'), '/'))
|
28 | } else if (stat.isDirectory()) {
|
29 | loop(dir)
|
30 | }
|
31 | }
|
32 | })
|
33 | loop(srcDir)
|
34 | return {
|
35 | files: files,
|
36 | names: names
|
37 | }
|
38 | }
|
39 |
|
40 | module.exports = function(options) {
|
41 | let args = arguments
|
42 | let lastParam = args[args.length - 1]
|
43 | let callback = lastParam && (typeof lastParam === 'function') ? lastParam : ''
|
44 | let clone = {
|
45 | bucket: options.bucket,
|
46 | src: options.src,
|
47 | fix: options.fix,
|
48 | ext: options.ext,
|
49 | urls: options.urls || [],
|
50 | rootDir: options.rootDir || '/'
|
51 | }
|
52 | let bucket = clone.bucket
|
53 | let src = clone.src
|
54 | let fix = clone.fix
|
55 | let ext = clone.ext
|
56 | let answer = null
|
57 |
|
58 | let saveFile = function() {
|
59 |
|
60 | if ((!fs.existsSync(keyFile)) && answer.save) {
|
61 | fs.existsSync(keyDir) ? '' : fs.mkdirSync(path.join(home, '.qiniu'))
|
62 | fs.createWriteStream(keyFile).write(JSON.stringify(answer));
|
63 | }
|
64 | }
|
65 |
|
66 | {
|
67 | if (fs.existsSync(keyFile) &&
|
68 | (answer = require(keyFile) &&
|
69 | answer.accessKey && answer.secretKey)) {
|
70 |
|
71 | update.apply(answer = require(keyFile), [callback])
|
72 | } else {
|
73 |
|
74 | inquiry(function(respAnswer) {
|
75 | update.apply(answer = respAnswer, [callback])
|
76 | })
|
77 | }
|
78 | }
|
79 |
|
80 | function update(fn) {
|
81 | let infos = readFiles(src, clone.rootDir, ext)
|
82 | let tempFiles = infos.files.slice(0)
|
83 | let tempNames = infos.names.slice(0)
|
84 |
|
85 | strike.apply(answer, [bucket, fix, function() {
|
86 | (function inner() {
|
87 | upload.apply(answer, [bucket, path.resolve(tempFiles[0]), fix + tempNames[0], function() {
|
88 | tempFiles.splice(0, 1)
|
89 | tempNames.splice(0, 1)
|
90 |
|
91 | if ((!tempFiles.length)) {
|
92 | saveFile.call()
|
93 | fn && fn.apply(null, [answer])
|
94 |
|
95 | if (clone.urls.length) {
|
96 | referUrl(fn)
|
97 | }
|
98 | } else {
|
99 | inner()
|
100 | }
|
101 | }])
|
102 | })()
|
103 | }])
|
104 |
|
105 | console.log(' ' + chalk.bgRed(' Upload number: ' + infos.files.length + ' files '))
|
106 | }
|
107 |
|
108 | function referUrl(fn) {
|
109 | refresh.apply(answer, [clone.urls, function() {
|
110 | fn && fn.apply(null, [answer])
|
111 | }])
|
112 | }
|
113 | } |
\ | No newline at end of file |