diff --git a/src/index.js b/src/index.js index 0c02149..7e27e23 100644 --- a/src/index.js +++ b/src/index.js @@ -18,12 +18,10 @@ const PORT = process.env.PORT || 3030; app.use(express.json()); -// 生产环境日志(仅关键信息) +// 日志函数(始终输出,PM2 会收集到日志文件) function log(...args) { - if (process.env.NODE_ENV !== 'production') { - const timestamp = new Date().toISOString(); - console.log(`[${timestamp}]`, ...args); - } + const timestamp = new Date().toISOString(); + console.log(`[${timestamp}]`, ...args); } // 加载完整配置 @@ -503,7 +501,16 @@ async function doUpload(chatId, feishu, uploader, info) { }); const result = await uploader.upload(tempFile, targetKey, bucket); - await uploader.refreshCDN(bucket, targetKey); + + // 刷新 CDN(带日志回调) + try { + await uploader.refreshCDN(bucket, targetKey, (msg) => { + log(msg); + }); + } catch (cdnError) { + log('⚠️ CDN 刷新失败,但上传成功:', cdnError.message); + // CDN 刷新失败不影响上传结果,继续 + } // 获取实际存储桶名称(不是配置别名) const fullConfig = loadFullConfig(); diff --git a/src/qiniu-uploader.js b/src/qiniu-uploader.js index 36c6c13..89403e9 100644 --- a/src/qiniu-uploader.js +++ b/src/qiniu-uploader.js @@ -153,25 +153,51 @@ class QiniuUploader { } // 刷新 CDN - async refreshCDN(bucketName, key) { + async refreshCDN(bucketName, key, logCallback) { const bucketConfig = this.config.buckets[bucketName]; - if (!bucketConfig) return; + if (!bucketConfig) { + if (logCallback) logCallback(`[CDN 刷新] 存储桶 "${bucketName}" 配置不存在`); + return; + } const { accessKey, secretKey, domain } = bucketConfig; + + // 检查密钥是否有效 + if (!accessKey || !secretKey || accessKey === 'YOUR_ACCESS_KEY' || secretKey === 'YOUR_SECRET_KEY') { + if (logCallback) logCallback(`[CDN 刷新] 警告:存储桶 "${bucketName}" 的密钥未配置,跳过 CDN 刷新`); + return; + } + const fileUrl = `${domain}/${key}`; + if (logCallback) logCallback(`[CDN 刷新] 请求刷新 URL: ${fileUrl}`); const body = JSON.stringify({ urls: [fileUrl] }); const accessToken = this.generateAccessToken(accessKey, secretKey, 'POST', '/v2/tune/refresh', body); - await this.httpRequest('https://fusion.qiniuapi.com/v2/tune/refresh', { - method: 'POST', - headers: { - 'Host': 'fusion.qiniuapi.com', - 'Content-Type': 'application/json', - 'Content-Length': body.length, - 'Authorization': accessToken + try { + const result = await this.httpRequest('https://fusion.qiniuapi.com/v2/tune/refresh', { + method: 'POST', + headers: { + 'Host': 'fusion.qiniuapi.com', + 'Content-Type': 'application/json', + 'Content-Length': body.length, + 'Authorization': accessToken + } + }, body); + + if (logCallback) logCallback(`[CDN 刷新] 响应状态:${result.status}, 数据:${JSON.stringify(result.data)}`); + + if (result.status !== 200) { + throw new Error(`CDN 刷新失败:${JSON.stringify(result.data)}`); } - }, body); + + if (logCallback) logCallback(`[CDN 刷新] ✅ 刷新成功`); + + return result.data; + } catch (error) { + if (logCallback) logCallback(`[CDN 刷新] ❌ 错误:${error.message}`); + throw error; + } } // 生成上传凭证