rigjs
Version:
A multi-repos dev tool based on yarn and git.Rigjs is intended to be the simplest way to develop,share and deliver codes between different developers or different projects.
76 lines (69 loc) • 2.12 kB
text/typescript
import aliOSS from 'ali-oss';
import fs from 'fs';
import { DeployTarget } from '../CICD';
import os from 'os';
import path from 'path';
class AliOSS {
ossClient: aliOSS;
constructor(target: DeployTarget) {
this.ossClient = new aliOSS({
region: target.region,
accessKeyId: target.access_key,
accessKeySecret: target.access_secret,
bucket: target.bucket,
timeout: 600000,
});
}
private async progress(p: number, filePath: string, ossPath: string) {
// 上传进度。
try {
process.stdout.clearLine(1);
process.stdout.cursorTo(0);
} catch (e) {}
try {
process.stdout.write(
`progress: ${p.toFixed(
2
)}%, Upload '${filePath}' To OSS_PATH:${ossPath}`
);
} catch (e) {}
}
public async putStreamFiles(filesList: string[], rootPath: string) {
for (let i = 0; i < filesList.length; i++) {
let filePath = '';
if (os.platform() === 'win32') {
filePath = filesList[i].split(`${rootPath}\\`)[1];
} else {
filePath = filesList[i].split(`${rootPath}/`)[1];
}
const ossPath = filePath.replace(/\\/g, '/');
//@ts-ignore
let options: aliOSS.PutStreamOptions = {
contentLength: fs.statSync(filesList[i]).size,
};
if (filesList[i].includes('index.html')) {
options.headers = { 'Cache-Control': 'no-cache', Expires: -1 };
} else if (
path.extname(filesList[i]) === '.js' ||
path.extname(filesList[i]) === '.css' ||
path.extname(filesList[i]) === '.ico'
) {
options.headers = { 'Cache-Control': 'max-age=31536000' };
}
const fileResult = await this.ossClient.putStream(
ossPath,
fs.createReadStream(filesList[i]),
options
);
if (fileResult.res.status !== 200) {
throw new Error('Upload OSS Error');
}
if (fileResult.res.status === 200) {
const p = ((i + 1) * 100) / filesList.length;
this.progress(p, filesList[i], ossPath);
}
}
console.log('\n');
}
}
export default AliOSS;