UNPKG

qiniu-mcp

Version:

A Model Context Protocol server for Qiniu Cloud Storage services with optimized local file upload support

184 lines (148 loc) 4.85 kB
#!/usr/bin/env node import { spawn } from 'child_process'; import fs from 'fs'; /** * 测试七牛云MCP上传优化 */ // 测试图片URL const testImageUrl = 'https://picsum.photos/800/600.jpg'; // 测试配置 const testConfig = { bucket: process.env.QINIU_BUCKET || 'test-bucket', key: `test-optimized-${Date.now()}.jpg` }; console.log('🚀 测试七牛云MCP上传优化...\n'); /** * 调用MCP工具 */ function callMCPTool(toolName, args) { return new Promise((resolve, reject) => { const child = spawn('node', ['dist/index.js'], { stdio: ['pipe', 'pipe', 'pipe'] }); let stdout = ''; let stderr = ''; child.stdout.on('data', (data) => { stdout += data.toString(); }); child.stderr.on('data', (data) => { stderr += data.toString(); }); child.on('close', (code) => { if (code === 0) { try { // 解析MCP响应 const lines = stdout.trim().split('\n'); const jsonLine = lines.find(line => { try { JSON.parse(line); return true; } catch { return false; } }); if (jsonLine) { resolve(JSON.parse(jsonLine)); } else { resolve({ stdout, stderr }); } } catch (error) { resolve({ stdout, stderr, error: error.message }); } } else { reject(new Error(`Process exited with code ${code}\nStderr: ${stderr}`)); } }); // 发送MCP请求 const request = { jsonrpc: "2.0", id: 1, method: "tools/call", params: { name: toolName, arguments: args } }; child.stdin.write(JSON.stringify(request) + '\n'); child.stdin.end(); }); } /** * 测试从URL上传(新的优化方法) */ async function testUploadFromUrl() { console.log('📤 测试从URL上传(优化方法)...'); const startTime = Date.now(); try { const result = await callMCPTool('qiniu_upload_from_url', { url: testImageUrl, bucket: testConfig.bucket, key: testConfig.key }); const endTime = Date.now(); const duration = endTime - startTime; console.log(`✅ 从URL上传成功!耗时: ${duration}ms`); console.log(`📁 文件: ${result.content?.[0]?.text || JSON.stringify(result)}`); return { success: true, duration, result }; } catch (error) { const endTime = Date.now(); const duration = endTime - startTime; console.log(`❌ 从URL上传失败!耗时: ${duration}ms`); console.log(`错误: ${error.message}`); return { success: false, duration, error: error.message }; } } /** * 测试Base64上传(对比方法) */ async function testUploadBase64() { console.log('📤 测试Base64上传(对比方法)...'); const startTime = Date.now(); try { // 先下载图片并转换为Base64 const response = await fetch(testImageUrl); const arrayBuffer = await response.arrayBuffer(); const base64Content = Buffer.from(arrayBuffer).toString('base64'); const result = await callMCPTool('qiniu_upload_base64', { base64Content, bucket: testConfig.bucket, key: `base64-${testConfig.key}`, contentType: 'image/jpeg' }); const endTime = Date.now(); const duration = endTime - startTime; console.log(`✅ Base64上传成功!耗时: ${duration}ms`); console.log(`📁 文件: ${result.content?.[0]?.text || JSON.stringify(result)}`); return { success: true, duration, result }; } catch (error) { const endTime = Date.now(); const duration = endTime - startTime; console.log(`❌ Base64上传失败!耗时: ${duration}ms`); console.log(`错误: ${error.message}`); return { success: false, duration, error: error.message }; } } /** * 运行性能对比测试 */ async function runPerformanceTest() { console.log('🏁 开始性能对比测试...\n'); // 测试从URL上传 const urlResult = await testUploadFromUrl(); console.log(''); // 测试Base64上传 const base64Result = await testUploadBase64(); console.log(''); // 输出对比结果 console.log('📊 性能对比结果:'); console.log('─'.repeat(50)); console.log(`从URL上传: ${urlResult.success ? '✅' : '❌'} ${urlResult.duration}ms`); console.log(`Base64上传: ${base64Result.success ? '✅' : '❌'} ${base64Result.duration}ms`); if (urlResult.success && base64Result.success) { const improvement = ((base64Result.duration - urlResult.duration) / base64Result.duration * 100).toFixed(1); console.log(`🚀 性能提升: ${improvement}%`); } console.log('─'.repeat(50)); } // 运行测试 runPerformanceTest().catch(console.error);