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 home = require('user-home')
|
9 | const keyDir = path.resolve(home, './.qiniu')
|
10 | const keyFile = path.resolve(home, './.qiniu/key.json')
|
11 |
|
12 | function readFiles(srcDir, ext) {
|
13 | let files = []
|
14 | let names = []
|
15 | let loop = (function loop(src) {
|
16 | let dirs = fs.readdirSync(src)
|
17 |
|
18 | for (let temp in dirs) {
|
19 | let dir = path.join(src, dirs[temp])
|
20 | let stat = fs.statSync(dir);
|
21 |
|
22 | if (stat.isFile() &&
|
23 | (!(new RegExp(ext + '$').test(dirs[temp])))) {
|
24 | files.push(dir = dir.replace(/\\/g, '\/'))
|
25 | names.push(((dir.match(/(\/[^\/]+\/+)[^\/]+$/) || [])[1] || '/') + dirs[temp])
|
26 | } else if (stat.isDirectory()) {
|
27 | loop(dir)
|
28 | }
|
29 | }
|
30 | })
|
31 | loop(srcDir)
|
32 | return {
|
33 | files: files,
|
34 | names: names
|
35 | }
|
36 | }
|
37 |
|
38 | module.exports = function(bucket, src, fix, ext) {
|
39 | let infos = readFiles(src, ext)
|
40 | let handFile = function(fn) {
|
41 | let context = this
|
42 | strike.apply(context, [bucket, fix, function() {
|
43 | infos.files.map(function(value, idx) {
|
44 | upload.apply(context, [bucket, path.resolve(value), fix + infos.names[idx], fn])
|
45 | })
|
46 | }])
|
47 | }
|
48 |
|
49 | console.log(' ' + chalk.bgRed(' Upload number: ' + infos.files.length + ' files '))
|
50 |
|
51 | if (fs.existsSync(keyFile)) {
|
52 | handFile.call(require(keyFile))
|
53 | } else {
|
54 |
|
55 | inquiry(function(answer) {
|
56 | handFile.call(answer, function() {
|
57 | if (answer.save) {
|
58 | fs.existsSync(keyDir) ? '' : fs.mkdirSync(path.join(home, '.qiniu'))
|
59 | fs.createWriteStream(keyFile).write(JSON.stringify(answer));
|
60 | }
|
61 | })
|
62 | })
|
63 | }
|
64 | } |
\ | No newline at end of file |