oss.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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 = REACT_APP_ENV === 'dev' ? 'zx-web-book-manage-test' : '';
  13. // 创建 OSS 客户端实例
  14. var client = new OSS({
  15. region: 'oss-cn-hangzhou',
  16. accessKeyId: 'LTAI5tBcAkDx7i9PR8uvjqxN',
  17. accessKeySecret: 'tWjouJKsb7ApTJLKVebxQFod6GYbOL',
  18. bucket,
  19. });
  20. // 删除已有文件
  21. async function deleteAllFiles() {
  22. try {
  23. let result;
  24. // 分页获取所有文件
  25. do {
  26. result = await client.list({
  27. 'max-keys': 1000, // 一次最多获取 1000 个文件
  28. });
  29. if (result.objects && result.objects.length) {
  30. const keys = result.objects.map((item) => item.name);
  31. console.log('Deleting files:', keys);
  32. // 删除文件
  33. await client.deleteMulti(keys);
  34. }
  35. } while (result.isTruncated); // 如果还有更多文件,继续循环
  36. console.log(`已删除bucket:${bucket}内的全部文件`);
  37. } catch (error) {
  38. console.error(`删除bucket:${bucket}内的全部文件错误:`, error);
  39. }
  40. }
  41. // 递归上传文件和目录
  42. async function uploadFilesFromDist(dirPath, ossPath) {
  43. const files = fs.readdirSync(dirPath);
  44. for (const file of files) {
  45. const localFilePath = path.join(dirPath, file);
  46. const ossFilePath = path.join(ossPath, file).replace(/\\/g, '/'); // 替换反斜杠为斜杠以兼容 OSS
  47. const stats = fs.statSync(localFilePath);
  48. if (stats.isDirectory()) {
  49. // 如果是目录,递归上传
  50. await uploadFilesFromDist(localFilePath, ossFilePath);
  51. } else {
  52. // 如果是文件,上传
  53. console.log(`正在上传: ${localFilePath} 到 ${ossFilePath}`);
  54. await client.put(ossFilePath, localFilePath);
  55. }
  56. }
  57. }
  58. // 主程序
  59. (async () => {
  60. if(!bucket){
  61. return
  62. }
  63. await deleteAllFiles();
  64. const distPath = path.join(__dirname, '../dist');
  65. await uploadFilesFromDist(distPath, ''); // OSS根目录
  66. })();