lrj
2 天以前 c61d4fe27c97d2ecc907756aa571a4ef14a7b9b6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
const COS = require('cos-js-sdk-v5');
const fs = require('fs');
const path = require('path');
 
// COS配置 - 请替换为实际的配置信息
const cosConfig = {
  SecretId: 'AKID_YOUR_SECRET_ID', // 请替换为实际的SecretId
  SecretKey: 'YOUR_SECRET_KEY', // 请替换为实际的SecretKey
};
 
const cos = new COS(cosConfig);
 
// 存储桶配置
const bucketConfig = {
  Bucket: 'ryc-media-1234567890', // 请替换为实际的存储桶名称
  Region: 'ap-chengdu', // 请替换为实际的地域
};
 
// 上传logo文件
async function uploadLogo() {
  try {
    console.log('开始上传logo文件...');
    
    // 读取logo文件
    const logoPath = path.join(__dirname, '../UI/logo.jpg');
    
    if (!fs.existsSync(logoPath)) {
      throw new Error(`文件不存在: ${logoPath}`);
    }
    
    const fileBuffer = fs.readFileSync(logoPath);
    const fileStats = fs.statSync(logoPath);
    
    console.log(`文件路径: ${logoPath}`);
    console.log(`文件大小: ${fileStats.size} bytes`);
    
    // 生成存储的文件名
    const timestamp = Date.now();
    const fileName = `avatars/logo_${timestamp}.jpg`;
    
    console.log(`上传到COS路径: ${fileName}`);
    
    // 执行上传
    const result = await new Promise((resolve, reject) => {
      cos.putObject({
        Bucket: bucketConfig.Bucket,
        Region: bucketConfig.Region,
        Key: fileName,
        Body: fileBuffer,
        ContentLength: fileStats.size,
        onProgress: function(progressData) {
          console.log('上传进度:', Math.round(progressData.percent * 100) + '%');
        }
      }, function(err, data) {
        if (err) {
          reject(err);
        } else {
          resolve(data);
        }
      });
    });
    
    console.log('上传成功!');
    console.log('文件URL:', `https://${result.Location}`);
    console.log('ETag:', result.ETag);
    
    // 保存上传结果到文件
    const uploadResult = {
      fileName: 'logo.jpg',
      cosPath: fileName,
      url: `https://${result.Location}`,
      uploadTime: new Date().toISOString(),
      fileSize: fileStats.size,
      etag: result.ETag
    };
    
    fs.writeFileSync(
      path.join(__dirname, 'upload-result.json'),
      JSON.stringify(uploadResult, null, 2)
    );
    
    console.log('上传结果已保存到 upload-result.json');
    
    return uploadResult;
    
  } catch (error) {
    console.error('上传失败:', error.message);
    
    if (error.code === 'SignatureDoesNotMatch') {
      console.error('签名错误,请检查SecretId和SecretKey是否正确');
    } else if (error.code === 'NoSuchBucket') {
      console.error('存储桶不存在,请检查Bucket名称和Region是否正确');
    } else if (error.code === 'AccessDenied') {
      console.error('访问被拒绝,请检查权限配置');
    }
    
    throw error;
  }
}
 
// 检查COS配置
function checkConfig() {
  console.log('检查COS配置...');
  console.log('Bucket:', bucketConfig.Bucket);
  console.log('Region:', bucketConfig.Region);
  console.log('SecretId:', cosConfig.SecretId ? cosConfig.SecretId.substring(0, 10) + '...' : '未配置');
  console.log('SecretKey:', cosConfig.SecretKey ? '已配置' : '未配置');
  
  if (!cosConfig.SecretId || !cosConfig.SecretKey) {
    console.error('❌ 请先配置SecretId和SecretKey');
    return false;
  }
  
  if (cosConfig.SecretId.includes('YOUR_SECRET_ID') || cosConfig.SecretKey.includes('YOUR_SECRET_KEY')) {
    console.error('❌ 请替换为实际的SecretId和SecretKey');
    return false;
  }
  
  if (bucketConfig.Bucket.includes('1234567890')) {
    console.error('❌ 请替换为实际的存储桶名称');
    return false;
  }
  
  console.log('✅ 配置检查通过');
  return true;
}
 
// 主函数
async function main() {
  console.log('=== 腾讯云COS Logo上传工具 ===\n');
  
  if (!checkConfig()) {
    console.log('\n请在脚本顶部修改COS配置信息:');
    console.log('1. SecretId: 腾讯云访问密钥ID');
    console.log('2. SecretKey: 腾讯云访问密钥Key');
    console.log('3. Bucket: 存储桶名称');
    console.log('4. Region: 存储桶所在地域');
    process.exit(1);
  }
  
  try {
    const result = await uploadLogo();
    console.log('\n🎉 Logo上传成功!');
    console.log('可以在以下URL访问文件:', result.url);
  } catch (error) {
    console.log('\n❌ Logo上传失败');
    process.exit(1);
  }
}
 
// 如果直接运行此脚本
if (require.main === module) {
  main();
}
 
module.exports = { uploadLogo, checkConfig };