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