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
JavaScript
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);