deployAssetsToOss.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. var OSS = require('ali-oss');
  2. var co = require('co');
  3. var path = require('path');
  4. var fs = require('fs');
  5. var cdnpath = "xihuadesign/";
  6. var client = new OSS({
  7. region: 'oss-cn-chengdu',
  8. accessKeyId: 'LTAI4GHqGdgY3b14jVRTzL2w',
  9. accessKeySecret: 'AHubozYEzXzi4fBL0ttLJ5sN1HMKA6',
  10. bucket: 'infishwaibao'
  11. });
  12. function GetSubFiles(dir) {
  13. return new Promise((reslove, reject) => {
  14. fs.readdir(dir, function (err, files) {
  15. reslove(files);
  16. });
  17. });
  18. }
  19. async function GetTotalFiles(dir) {
  20. let subfiles = await GetSubFiles(dir);
  21. let files = [], len = subfiles.length;
  22. let ret = [];
  23. for (let i = 0; i < len; i++) {
  24. let f = subfiles[i];
  25. let fpath = `${dir}/${f}`;
  26. var stat = fs.lstatSync(fpath);
  27. if (!stat.isDirectory()) {
  28. ret.push(fpath);
  29. } else {
  30. let fsubs = await GetTotalFiles(fpath);
  31. let size = fsubs.length;
  32. for (let k = 0; k < size; k++) {
  33. ret.push(fsubs[k]);
  34. }
  35. }
  36. }
  37. return ret;
  38. }
  39. GetTotalFiles("dist").then((files) => {
  40. handleFile(files);
  41. });
  42. async function handleFile(files) {
  43. let i = 0, len = files.length;
  44. for (; i < len; i++) {
  45. let fpath = files[i];
  46. if (path.extname(fpath) != ".map") {
  47. await UploadOss(files[i]);
  48. }
  49. }
  50. }
  51. function UploadOss(src) {
  52. return new Promise((resolve, reject) => {
  53. co(function* () {
  54. let fpath = src.substr(5); //去掉前面的dist
  55. console.log('uploading ' + fpath);
  56. var ret = yield client.put(cdnpath + fpath, src, { timeout: 2000000 });
  57. console.log(ret.url);
  58. let i = 0;
  59. while (!ret) {
  60. if (i++ > 3) {
  61. reject(`uploading ${src} error!`);
  62. return;
  63. }
  64. ret = yield client.put(cdnpath + fpath, dist, { timeout: 2000000 });
  65. }
  66. console.log(ret.url);
  67. resolve(ret);
  68. });
  69. });
  70. }