const path = require("path");
const fs = require("fs");
const OSS = require("ali-oss");
class Oss {
constructor() {
this.upOss();
}
getAllFile = function (dir) {
const res = [];
function traverse(dir) {
fs.readdirSync(dir).forEach((file) => {
const pathname = path.join(dir, file);
if (fs.statSync(pathname).isDirectory()) {
traverse(pathname);
} else {
res.push(pathname);
}
});
}
traverse(dir);
return res;
};
upOss = async () => {
const client = new OSS({
region: process.env.region,
accessKeyId: process.env.accessKeyId,
accessKeySecret: process.env.accessKeySecret,
bucket: process.env.bucket,
});
const { objects } = await client.list({
"max-keys": 1000,
});
const sFileList = !objects ? [] : objects.flatMap((it) => it.name);
const distPath = path.normalize(path.join(__dirname, "../../dist"));
const cFilelist = this.getAllFile(distPath);
const errorFile = [];
const objFile = {};
const cFilePathlist = [];
cFilelist.forEach((it) => {
const fileName = it
.replace(distPath, "")
.replace(/^\\|\//, "")
.replace("\\", "/");
objFile[fileName] = it;
fileName != "index.html" && cFilePathlist.push(fileName);
});
// 需要删除的文件
const delFileList = sFileList.filter(
(it) => !cFilePathlist.includes(it) && it != "index.html"
);
const addFileList = cFilePathlist.filter((it) => {
return !sFileList.includes(it) || !it.includes("/");
});
console.log("addFileList :>> ", addFileList.length, addFileList);
console.log("delFileList :>> ", delFileList.length, delFileList);
addFileList.forEach(async (it) => {
const { res } = await client.put(it, objFile[it]);
res.status != 200 && errorFile.push(it);
});
if (!errorFile.length) {
// 上传index.html
const { res } = await client.put("index.html", objFile["index.html"]);
console.info("发布 :>> ", res.status == 200 ? "成功" : "失败");
if (res.status == 200) {
const delError = [];
delFileList.forEach(async (it) => {
const res2 = await client.delete(it);
res2.res.status != 200 && delError.push(it);
});
console.log("清理文件 :>> ", !delError.length ? "成功" : "失败");
}
}
};
}
new Oss();
module.exports = Oss;
node发布网站到oss
最新推荐文章于 2023-05-16 00:18:36 发布