postOss.js 3.13 KB
/* 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()