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 };