123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- const OSS = require("ali-oss");
- const fs = require("fs");
- const path = require("path");
- const { REACT_APP_ENV = "dev" } = process.env;
- /**
- * 打包结束后将打包内容上传至对应oss下的bucket
- * 主要逻辑在package.json 在build命令执行后执行自义定的ossUploading 命令
- * 1.步骤为删除当前bucket的全部文件
- * 2.然后再上传
- */
- /**重要bucket*/
- // let bucket = "zx-web-enterprisewechat-pro";
- // 创建 OSS 客户端实例
- var client,bucket,fileName
- // 删除已有文件
- async function deleteAllFiles() {
- try {
- let result;
- // 分页获取所有文件
- do {
- result = await client.list({
- "max-keys": 1000, // 一次最多获取 1000 个文件
- });
- if (result.objects && result.objects.length) {
- const keys = result.objects.map((item) => item.name);
- console.log("Deleting files:", keys);
- // 删除文件
- await client.deleteMulti(keys);
- }
- } while (result.isTruncated); // 如果还有更多文件,继续循环
- console.log(`已删除bucket:${bucket}内的全部文件`);
- } catch (error) {
- console.error(`删除bucket:${bucket}内的全部文件错误:`, error);
- }
- }
- // 递归上传文件和目录
- async function uploadFilesFromDist(dirPath, ossPath) {
- const files = fs.readdirSync(dirPath);
- for (const file of files) {
- const localFilePath = path.join(dirPath, file);
- const ossFilePath = path.join(ossPath, file).replace(/\\/g, "/"); // 替换反斜杠为斜杠以兼容 OSS
- const stats = fs.statSync(localFilePath);
- if (stats.isDirectory()) {
- // 如果是目录,递归上传
- await uploadFilesFromDist(localFilePath, ossFilePath);
- } else {
- // 如果是文件,上传
- console.log(`正在上传: ${localFilePath} 到 ${ossFilePath}`);
- await client.put(ossFilePath, localFilePath);
- }
- }
- }
- // 主程序
- async function postOss(bucket,fileName) {
- if (!bucket) {
- console.log("bucket不存在")
- return;
- }
- bucket = bucket
- fileName =fileName
- client = new OSS({
- region: "oss-cn-hangzhou",
- accessKeyId: "LTAI5tNCVYS4XZmfUmtAZKK9",
- accessKeySecret: "K1gIGmgf4QLY0arIGWxxV9cuchAyOQ",
- bucket,
- });
- await deleteAllFiles();
- const distPath = path.join(__dirname, fileName);
- await uploadFilesFromDist(distPath, ""); // OSS根目录
- }
- module.exports = { postOss };
|