postOss.js
3.13 KB
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/* eslint-disable no-console */
const axios = require('axios')
const fs = require('fs')
const path = require('path')
const sha256 = require('js-sha256')
const ora = require('ora')
const FormData = require('form-data')
const Package = require('../package.json')
const entryFile = '../build/static/'
const url = `https://gateway-test.b2bwings.com/ops/oss/fileUpload?bucket=xbd-app&fileDirectory=js/${Package.name}/${process.env.OUTPUT}/${Package.version}/static/`
const account = '13802965035'
const pswd = '114331'
let headers
const mergePath = url => path.resolve(__dirname, url)
const readDir = async (path) => {
return new Promise((res, rej) => {
fs.readdir(
mergePath(path),
{ encoding: 'utf-8' },
(err, files) => err ? rej(err) : res(files)
)
})
}
const readFile = (path) => {
return fs.createReadStream(mergePath(path), { encoding: 'utf-8' })
}
const isDir = (path) => {
const state = fs.statSync(mergePath(path))
return state.isDirectory()
}
/** 上传文件,回调遍历 */
const upload = async (path) => {
if (isDir(path)) { // 文件夹
const files = await readDir(path)
for (let i = 0; i < files.length; i++) await upload(path + '/' + files[i])
return null
} else { // 文件
const file = readFile(path)
const form = new FormData()
form.append('file', file)
const formHeaders = form.getHeaders()
let _url = url + String(path).replace(entryFile, '')
_url = _url.slice(0, _url.lastIndexOf('/') + 1)
const data = {
url: _url,
method: 'post',
data: form,
headers: { ...headers, ...formHeaders },
timeout: 600000
}
return axios(data).then(res => {
if (res.data.code !== 200)
return Promise.reject(res.data.message)
return Promise.resolve()
}).catch(err => {
console.error(err)
process.exit(err)
})
}
}
/** 获取sessionid */
const getSessionID = async () => {
const spinner = ora('获取sessionId')
spinner.start()
return axios({
url: 'https://gateway-test.b2bwings.com/user/sysLogin/login',
method: 'post',
data: {
loginAccount: account,
loginPassword: sha256(pswd),
applyPlatform: [1],
applyCarrier: [0],
operationChannel: 0
}
}).then(async (res) => {
spinner.succeed()
return { Sessionid: res.data.data.sessionid }
})
.catch(err => {
console.error(err)
process.exit(err)
})
}
/** 上传文件 */
const uploadFiles = async (path) => {
const spinner = ora('开始上传' + path + '\n')
spinner.start()
await upload(path)
spinner.succeed()
}
/** 上传所有文件 */
const UploadAllFiles = async () => {
const fiels = await readDir(entryFile)
for(let i = 0; i< fiels.length; i ++)
await uploadFiles(entryFile + fiels[i])
}
const app = async () => {
headers = await getSessionID()
await UploadAllFiles()
console.log('\x1B[32m', '上传成功')
}
app()