Files
crawlab/core/docs/scripts/publish.js
2024-06-14 15:42:50 +08:00

82 lines
1.8 KiB
Go

const path = require('path')
const qiniu = require('qiniu')
const walkSync = require('walk-sync')
const chalk = require('chalk')
// target directory
const targetDir = './api'
// access key
const accessKey = process.env.QINIU_ACCESS_KEY
// secret key
const secretKey = process.env.QINIU_SECRET_KEY
// bucket
const bucket = process.env.QINIU_BUCKET
// config
const config = new qiniu.conf.Config()
// zone
config.zone = qiniu.zone[process.env.QINIU_ZONE]
function uploadFile(localFile, key) {
// options
const options = {
scope: `${bucket}:${key}`,
}
// mac
const mac = new qiniu.auth.digest.Mac(accessKey, secretKey)
// put policy
const putPolicy = new qiniu.rs.PutPolicy(options)
// upload token
const uploadToken = putPolicy.uploadToken(mac)
return new Promise((resolve, reject) => {
const formUploader = new qiniu.form_up.FormUploader(config)
const putExtra = new qiniu.form_up.PutExtra()
formUploader.putFile(uploadToken, key, localFile, putExtra, function (respErr, respBody, respInfo) {
if (respErr) {
throw respErr
}
if (respInfo.statusCode === 200) {
console.log(`${chalk.green('uploaded')} ${localFile} => ${key}`)
resolve()
} else if (respInfo.statusCode === 614) {
console.log(`${chalk.yellow('exists')} ${localFile} => ${key}`)
resolve()
} else {
const errMsg = `${chalk.red('error[' + respInfo.statusCode + ']')} ${localFile} => ${key}`
console.error(errMsg)
reject(new Error(respBody))
}
})
})
}
async function main() {
// paths
const paths = walkSync(targetDir, {
includeBasePath: true, directories: false,
})
// iterate paths
for (const filePath of paths) {
const localFile = path.resolve(filePath)
const key = filePath.replace(targetDir + '/', '')
try {
await uploadFile(localFile, key)
} finally {
// do nothing
}
}
}
(async () => {
await main()
})()