oss.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. const OSS = require("ali-oss");
  2. const fs = require("fs");
  3. const path = require("path");
  4. const { REACT_APP_ENV = "dev" } = process.env;
  5. /**
  6. * 打包结束后将打包内容上传至对应oss下的bucket
  7. * 主要逻辑在package.json 在build命令执行后执行自义定的ossUploading 命令
  8. * 1.步骤为删除当前bucket的全部文件
  9. * 2.然后再上传
  10. */
  11. /**重要bucket*/
  12. // let bucket = "zx-web-enterprisewechat-pro";
  13. // 创建 OSS 客户端实例
  14. var client,bucket,fileName
  15. // 删除已有文件
  16. async function deleteAllFiles() {
  17. try {
  18. let result;
  19. // 分页获取所有文件
  20. do {
  21. result = await client.list({
  22. "max-keys": 1000, // 一次最多获取 1000 个文件
  23. });
  24. if (result.objects && result.objects.length) {
  25. const keys = result.objects.map((item) => item.name);
  26. console.log("Deleting files:", keys);
  27. // 删除文件
  28. await client.deleteMulti(keys);
  29. }
  30. } while (result.isTruncated); // 如果还有更多文件,继续循环
  31. console.log(`已删除bucket:${bucket}内的全部文件`);
  32. } catch (error) {
  33. console.error(`删除bucket:${bucket}内的全部文件错误:`, error);
  34. }
  35. }
  36. // 递归上传文件和目录
  37. async function uploadFilesFromDist(dirPath, ossPath) {
  38. const files = fs.readdirSync(dirPath);
  39. for (const file of files) {
  40. const localFilePath = path.join(dirPath, file);
  41. const ossFilePath = path.join(ossPath, file).replace(/\\/g, "/"); // 替换反斜杠为斜杠以兼容 OSS
  42. const stats = fs.statSync(localFilePath);
  43. if (stats.isDirectory()) {
  44. // 如果是目录,递归上传
  45. await uploadFilesFromDist(localFilePath, ossFilePath);
  46. } else {
  47. // 如果是文件,上传
  48. console.log(`正在上传: ${localFilePath} 到 ${ossFilePath}`);
  49. await client.put(ossFilePath, localFilePath);
  50. }
  51. }
  52. }
  53. // 主程序
  54. async function postOss(bucket,fileName) {
  55. if (!bucket) {
  56. console.log("bucket不存在")
  57. return;
  58. }
  59. bucket = bucket
  60. fileName =fileName
  61. client = new OSS({
  62. region: "oss-cn-hangzhou",
  63. accessKeyId: "LTAI5tNCVYS4XZmfUmtAZKK9",
  64. accessKeySecret: "K1gIGmgf4QLY0arIGWxxV9cuchAyOQ",
  65. bucket,
  66. });
  67. await deleteAllFiles();
  68. const distPath = path.join(__dirname, fileName);
  69. await uploadFilesFromDist(distPath, ""); // OSS根目录
  70. }
  71. module.exports = { postOss };