putObject
Upload local files to cloud storage buckets by specifying file paths, target directories, and custom filenames for organized cloud file management.
Instructions
上传本地文件到存储桶
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | Yes | 文件路径 (包含文件名) | |
| fileName | No | 文件名 (存在存储桶里的名称) | |
| targetDir | No | 目标目录 (存在存储桶的哪个目录) |
Input Schema (JSON Schema)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"fileName": {
"description": "文件名 (存在存储桶里的名称)",
"type": "string"
},
"filePath": {
"description": "文件路径 (包含文件名)",
"type": "string"
},
"targetDir": {
"description": "目标目录 (存在存储桶的哪个目录)",
"type": "string"
}
},
"required": [
"filePath"
],
"type": "object"
}
Implementation Reference
- src/services/cos/cos.service.ts:109-150 (handler)Core handler logic for uploading a local file to COS bucket: validates parameters, checks file existence, builds object key, performs upload via cos.uploadFile, handles errors.async uploadFile(params: UploadFileParams) { // 验证并解析参数 const validParams = UploadFileParamsSchema.parse(params); const { filePath, targetDir = '', fileName } = validParams; try { // 检查文件是否存在 if (!filePath || !fs.existsSync(filePath)) { return { isSuccess: false, message: '此路径上文件不存在', data: '此路径上文件不存在: ' + filePath, }; } // 确定文件名 const actualFileName = fileName || path.basename(filePath); // 构建COS路径 const cosPath = this.buildCosPath(actualFileName, targetDir); // 上传文件 const cosParams: COS.UploadFileParams = { Bucket: this.bucket, Region: this.region, Key: cosPath, FilePath: filePath, }; const result = await this.cos.uploadFile(cosParams); return { isSuccess: true, message: '上传成功', data: result, }; } catch (error) { return { isSuccess: false, message: '上传失败', data: error, }; } }
- src/server.ts:84-111 (registration)Registers the 'putObject' MCP tool, defines input schema with zod, and provides thin handler that delegates to CosService.uploadFile and formats response.server.tool( 'putObject', '上传本地文件到存储桶', { filePath: z.string().describe('文件路径 (包含文件名)'), fileName: z.string().optional().describe('文件名 (存在存储桶里的名称)'), targetDir: z .string() .optional() .describe('目标目录 (存在存储桶的哪个目录)'), }, async ({ fileName, filePath, targetDir }) => { const res = await COSInstance.uploadFile({ fileName, filePath, targetDir, }); return { content: [ { type: 'text', text: JSON.stringify(res.data, null, 2), }, ], isError: !res.isSuccess, }; }, );
- Zod schema definition for upload file parameters, used for validation inside the uploadFile handler.export const UploadFileParamsSchema = z.object({ filePath: z.string().optional(), targetDir: z.string().optional(), fileName: z.string().optional(), sourceUrl: z.string().optional() }); export type UploadFileParams = z.infer<typeof UploadFileParamsSchema>;
- Helper function to construct the full COS object key/path from filename and optional target directory.private buildCosPath(fileName: string, targetDir?: string): string { if (!targetDir) { return fileName; } // 规范化目标目录:移除头尾斜杠 const normalizedDir = targetDir.replace(/^\/+|\/+$/g, ''); return normalizedDir ? `${normalizedDir}/${fileName}` : fileName; }