Skip to main content
Glama
OSS_IMPLEMENTATION.md2.89 kB
# 阿里云OSS上传功能实现总结 ## 功能概述 实现了完整的阿里云OSS文件上传功能,包括: - 临时上传凭证获取 - 直接上传到OSS - 上传进度跟踪 - 状态管理 - 错误处理和重试机制 ## 文件结构 ### 1. API路由 (`/api/assets/oss/route.ts`) - **POST方法**: 获取OSS临时上传凭证 - **GET方法**: 处理上传完成后的回调 ### 2. 工具函数 (`/lib/utils.ts`) - `uploadToOSS()`: 基础OSS上传函数 - `uploadToOSSWithProgress()`: 带进度跟踪的OSS上传函数 - `getOSSFileUrl()`: 获取OSS文件完整URL ### 3. 组件更新 - `FormFileUpload`: 文件上传组件,支持多文件上传和进度显示 - `SuggestionDialog`: 建议对话框,支持附件上传 - `SubmitPage`: 应用提交页面,支持Logo上传 ### 4. 测试页面 - `/test-upload`: OSS上传功能测试页面 ## 核心功能 ### 上传流程 1. **获取临时凭证**: 前端调用POST `/api/assets/oss` 获取临时上传URL 2. **直接上传**: 使用临时URL直接上传文件到OSS 3. **回调通知**: 上传完成后调用GET `/api/assets/oss` 通知服务器 ### 状态管理 - `idle`: 初始状态 - `uploading`: 上传中,显示进度 - `success`: 上传成功 - `error`: 上传失败,支持重试 ### 安全特性 - 临时上传凭证,有效期15分钟 - 文件类型和大小验证 - 唯一文件名生成 - 参数验证和错误处理 ## 环境配置 在 `.env.local` 中配置: ```bash ALIYUN_OSS_REGION=oss-cn-hangzhou ALIYUN_ACCESS_KEY_ID=your_access_key_id ALIYUN_ACCESS_KEY_SECRET=your_access_key_secret ALIYUN_OSS_BUCKET=your_bucket_name ``` ## 使用示例 ### 基础使用 ```typescript import { uploadToOSS } from "@/lib/utils"; const result = await uploadToOSS(file, "app-logos"); if (result.success) { console.log("上传成功:", result.url); } ``` ### 带进度跟踪 ```typescript import { uploadToOSSWithProgress } from "@/lib/utils"; const result = await uploadToOSSWithProgress(file, "app-logos", (progress) => { console.log(`上传进度: ${progress}%`); }); ``` ### 组件使用 ```tsx <FormFileUpload label="上传图片" assetType="app-logos" onUploadComplete={(assetIds) => { console.log("上传完成:", assetIds); }} multiple maxFiles={5} /> ``` ## 支持的文件类型 - 图片:JPEG, PNG, GIF, WebP, SVG - 文档:PDF, TXT, DOC, DOCX - 文件大小限制:10MB(可配置) ## 错误处理 - 文件类型验证 - 文件大小限制 - 网络错误处理 - 上传失败重试 - 用户友好的错误提示 ## 性能优化 - 直接上传到OSS,减少服务器负载 - 进度跟踪提供良好的用户体验 - 支持多文件并发上传 - 文件预览和状态管理 ## 测试 访问 `/test-upload` 页面可以测试所有上传功能,包括: - 单文件上传 - 多文件上传 - 进度显示 - 错误处理 - 重试机制

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/metacode0602/open-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server