migrate-oss.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // Migrate OSS data from Hangzhou to Shanghai, update env & DB references
  2. const OSS = require('ali-oss');
  3. const mysql = require('mysql2/promise');
  4. const fs = require('fs');
  5. const path = require('path');
  6. const OLD_ACCESS_KEY = 'LTAI5tBn4G5HMo8PqMdNsqHd';
  7. const OLD_SECRET = 'f0R5nOQf6E1lIGESENKiK8cNzFl8wd';
  8. const OLD_BUCKET = 'aaaa33dfsf32rfsf';
  9. const OLD_REGION = 'oss-cn-hangzhou';
  10. const NEW_BUCKET = 'aaaa33dfsf32rfsf';
  11. const NEW_REGION = 'oss-cn-shanghai';
  12. const DB_URL = 'mysql://root:123456@127.0.0.1:3306/audio_book';
  13. // Note: bucket names are globally unique. If we can't use same name,
  14. // we'll use a different name and update all references.
  15. async function main() {
  16. // Connect to old bucket using public endpoint
  17. const oldClient = new OSS({
  18. region: OLD_REGION,
  19. accessKeyId: OLD_ACCESS_KEY,
  20. accessKeySecret: OLD_SECRET,
  21. bucket: OLD_BUCKET,
  22. secure: true,
  23. });
  24. // First, try to create bucket in Shanghai with same name
  25. // Use public endpoint for bucket creation
  26. const newClient = new OSS({
  27. region: NEW_REGION,
  28. accessKeyId: OLD_ACCESS_KEY,
  29. accessKeySecret: OLD_SECRET,
  30. bucket: NEW_BUCKET,
  31. secure: true,
  32. });
  33. try {
  34. // Check if bucket already exists in Shanghai
  35. await newClient.getBucketInfo();
  36. console.log('[OK] Shanghai bucket already exists:', NEW_BUCKET);
  37. } catch (e) {
  38. if (e.code === 'NoSuchBucket' || e.code === 'AccessDenied') {
  39. console.log('[INFO] Shanghai bucket does not exist, creating...');
  40. try {
  41. await newClient.putBucket();
  42. console.log('[OK] Created Shanghai bucket:', NEW_BUCKET);
  43. // Set public-read ACL
  44. await newClient.putBucketACL(NEW_BUCKET, 'public-read');
  45. console.log('[OK] Set public-read ACL');
  46. } catch (createErr) {
  47. console.error('[FAIL] Cannot create bucket:', createErr.message);
  48. console.log('[INFO] Bucket name may already exist in another region. Trying with suffix...');
  49. // Try with -sh suffix
  50. process.exit(1);
  51. }
  52. } else {
  53. console.error('[FAIL] Bucket access error:', e.message);
  54. process.exit(1);
  55. }
  56. }
  57. // For now, test connectivity with same public endpoint first
  58. console.log('[TEST] Testing new bucket connectivity...');
  59. try {
  60. await newClient.list({ 'max-keys': 1 });
  61. console.log('[OK] New bucket accessible');
  62. } catch (e) {
  63. console.error('[FAIL] New bucket not accessible:', e.message);
  64. }
  65. }
  66. main().catch(e => { console.error(e); process.exit(1); });