138 lines
3.3 KiB
JavaScript
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
|