refactor: migrate to Tencent Cloud backend
这个提交包含在:
@@ -0,0 +1,78 @@
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const COS = require('cos-nodejs-sdk-v5')
|
||||
|
||||
const root = path.join(__dirname, '..', 'dist', 'build', 'h5')
|
||||
const serverEnv = path.join(__dirname, '..', '..', 'server', '.env')
|
||||
|
||||
if (fs.existsSync(serverEnv)) {
|
||||
require('dotenv').config({ path: serverEnv })
|
||||
}
|
||||
|
||||
const bucket = process.env.COS_BUCKET
|
||||
const region = process.env.COS_REGION || process.env.TENCENT_REGION
|
||||
const secretId = process.env.TENCENT_SECRET_ID
|
||||
const secretKey = process.env.TENCENT_SECRET_KEY
|
||||
const prefix = process.env.ADMIN_COS_PREFIX || 'admin/'
|
||||
|
||||
if (!bucket || !region || !secretId || !secretKey) {
|
||||
console.error('COS_BUCKET, COS_REGION, TENCENT_SECRET_ID and TENCENT_SECRET_KEY are required')
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
if (!fs.existsSync(root)) {
|
||||
console.error('Build output not found: ' + root)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
const cos = new COS({ SecretId: secretId, SecretKey: secretKey })
|
||||
|
||||
function walk(dir) {
|
||||
const files = []
|
||||
fs.readdirSync(dir).forEach(name => {
|
||||
const file = path.join(dir, name)
|
||||
const stat = fs.statSync(file)
|
||||
if (stat.isDirectory()) files.push.apply(files, walk(file))
|
||||
else files.push(file)
|
||||
})
|
||||
return files
|
||||
}
|
||||
|
||||
function contentType(file) {
|
||||
if (file.endsWith('.html')) return 'text/html; charset=utf-8'
|
||||
if (file.endsWith('.js')) return 'application/javascript; charset=utf-8'
|
||||
if (file.endsWith('.css')) return 'text/css; charset=utf-8'
|
||||
if (file.endsWith('.json')) return 'application/json; charset=utf-8'
|
||||
if (file.endsWith('.svg')) return 'image/svg+xml'
|
||||
if (file.endsWith('.png')) return 'image/png'
|
||||
if (file.endsWith('.jpg') || file.endsWith('.jpeg')) return 'image/jpeg'
|
||||
return 'application/octet-stream'
|
||||
}
|
||||
|
||||
async function upload(file) {
|
||||
const relative = path.relative(root, file).replace(/\\/g, '/')
|
||||
const key = prefix + relative
|
||||
await new Promise((resolve, reject) => {
|
||||
cos.putObject({
|
||||
Bucket: bucket,
|
||||
Region: region,
|
||||
Key: key,
|
||||
Body: fs.createReadStream(file),
|
||||
ContentType: contentType(file)
|
||||
}, err => err ? reject(err) : resolve())
|
||||
})
|
||||
console.log('uploaded ' + key)
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const files = walk(root)
|
||||
for (const file of files) {
|
||||
await upload(file)
|
||||
}
|
||||
console.log('Admin console uploaded to cos://' + bucket + '/' + prefix)
|
||||
}
|
||||
|
||||
main().catch(err => {
|
||||
console.error(err.message || err)
|
||||
process.exit(1)
|
||||
})
|
||||
在新工单中引用
屏蔽一个用户