cfgtools/app/src/cdnTools.js
2021-10-18 14:20:48 +08:00

138 lines
3.3 KiB
JavaScript

const stringUtil = require('./stringUtil')
const COS = require('cos-nodejs-sdk-v5')
const request = require('request')
const generateNonce = function() {
return stringUtil.randomNum(10000, 99999)
}
const SecretId = 'AKIDvmW8mNvCQVt9GEnd3JNH5lHKI8oJnv46'
const SecretKey = 'd6QZhgT7alnhR3VghWAg3FF4c2JMG1c2'
const cosCDN = new COS({
SecretId,
SecretKey
})
const generateSign = function(method, data) {
let str = `${method}cdn.api.qcloud.com/v2/index.php?`
let i = 0
for (const key in data) {
if ({}.hasOwnProperty.call(data, key)) {
if (i++ > 0) str += '&'
str += `${key}=${data[key]}`
}
}
return stringUtil.sha1keyBase64(str, SecretKey)
}
const cdnTools = {
refreshDir(url) {
const now = Math.round(new Date() / 1000)
const data = {
Action: 'RefreshCdnDir',
Nonce: generateNonce(),
SecretId: SecretId,
Timestamp: now,
'dirs.0': url
}
data.Signature = generateSign('POST', data)
return new Promise((resolve, reject) => {
const link = 'https://cdn.api.qcloud.com/v2/index.php'
const options = {
method: 'POST',
url: link,
headers: {
'Cache-Control': 'no-cache',
'Content-Type': 'application/x-www-form-urlencoded'
},
form: data
}
request(options, (err, response, body) => {
if (err) {
return reject(err)
}
resolve(JSON.parse(body))
})
})
},
refreshOneUrl(url) {
const now = Math.round(new Date() / 1000)
const data = {
Action: 'RefreshCdnUrl',
Nonce: generateNonce(),
SecretId: SecretId,
Timestamp: now,
'urls.0': url
}
data.Signature = generateSign('POST', data)
return new Promise((resolve, reject) => {
const link = 'https://cdn.api.qcloud.com/v2/index.php'
const options = {
method: 'POST',
url: link,
headers: {
'Cache-Control': 'no-cache',
'Content-Type': 'application/x-www-form-urlencoded'
},
form: data
}
request(options, (err, response, body) => {
if (err) {
return reject(err)
}
resolve(JSON.parse(body))
})
})
},
uploadToCDN(fileName, path) {
return new Promise(function(resolve, reject) {
cosCDN.sliceUploadFile({
Bucket: 'client-1256832210',
Region: 'ap-beijing',
Key: fileName,
FilePath: path
}, function(err, data) {
if (err) {
reject(err)
} else {
resolve(data)
}
})
})
},
deleteFromCDN(files) {
return new Promise(function(resolve, reject) {
cosCDN.deleteMultipleObject({
Bucket: 'client-1256832210',
Region: 'ap-beijing',
Objects: files
}, function(err, data) {
if (err) {
reject(err)
} else {
resolve(data)
}
})
})
},
listCDN(subPath) {
return new Promise(function(resolve, reject) {
cosCDN.getBucket({
Bucket: 'client-1256832210',
Region: 'ap-beijing',
Prefix: subPath
}, function(err, data) {
// console.log(err || data.Contents)
if (err) {
reject(err)
} else {
resolve(data.Contents)
}
})
})
}
}
module.exports = cdnTools