qwen_agent/docs/file_manage_apis.md
2026-04-03 19:57:34 +08:00

436 lines
9.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 文件管理 API 接口文档
**Base URL:** `/api/v1/file-manager`
---
## 1. 列出目录内容
**GET** `/api/v1/file-manager/list`
| 参数 | 类型 | 位置 | 必填 | 说明 |
|------|------|------|------|------|
| path | string | query | 否 | 相对路径空字符串返回根目录projects/prompt |
| recursive | bool | query | 否 | 是否递归列出子目录,默认 false |
```bash
curl -X GET "/api/v1/file-manager/list?path=projects&recursive=false"
```
响应示例:
```json
{
"success": true,
"path": "projects",
"items": [
{
"name": "report.pdf",
"path": "projects/report.pdf",
"type": "file",
"size": 102400,
"modified": 1700000000.0,
"created": 1699000000.0
}
],
"total": 1
}
```
---
## 2. 上传文件
**POST** `/api/v1/file-manager/upload`
请求方式表单数据上传multipart/form-data
| 参数 | 类型 | 位置 | 必填 | 说明 |
|------|------|------|------|------|
| file | file | form | 是 | 上传的文件 |
| path | string | form | 否 | 目标目录路径,默认 `projects` |
```bash
curl -X POST "/api/v1/file-manager/upload" \
-F "file=@document.pdf" \
-F "path=projects/dataset"
```
响应示例:
```json
{
"success": true,
"message": "文件上传成功",
"filename": "document.pdf",
"original_filename": "document.pdf",
"path": "projects/dataset/document.pdf",
"size": 102400
}
```
> 注:文件名中的空格会自动替换为下划线。
---
## 3. 下载文件
**GET** `/api/v1/file-manager/download/{file_path}`
| 参数 | 类型 | 位置 | 必填 | 说明 |
|------|------|------|------|------|
| file_path | string | path | 是 | 文件相对路径 |
```bash
curl -X GET "/api/v1/file-manager/download/projects/report.pdf" -o report.pdf
```
响应:文件二进制流,`Content-Type` 根据文件类型自动推断。
---
## 4. 删除文件或目录
**DELETE** `/api/v1/file-manager/delete`
| 参数 | 类型 | 位置 | 必填 | 说明 |
|------|------|------|------|------|
| path | string | query | 是 | 要删除的路径 |
```bash
curl -X DELETE "/api/v1/file-manager/delete?path=projects/report.pdf"
```
响应示例:
```json
{
"success": true,
"message": "文件删除成功",
"path": "projects/report.pdf"
}
```
---
## 5. 创建文件夹
**POST** `/api/v1/file-manager/create-folder`
请求方式JSON
| 参数 | 类型 | 位置 | 必填 | 说明 |
|------|------|------|------|------|
| path | string | body | 否 | 父目录路径,默认 `projects` |
| name | string | body | 是 | 文件夹名称 |
```bash
curl -X POST "/api/v1/file-manager/create-folder" \
-H "Content-Type: application/json" \
-d '{"path": "projects", "name": "new-folder"}'
```
响应示例:
```json
{
"success": true,
"message": "文件夹创建成功",
"path": "projects/new-folder"
}
```
---
## 6. 重命名文件或文件夹
**POST** `/api/v1/file-manager/rename`
| 参数 | 类型 | 位置 | 必填 | 说明 |
|------|------|------|------|------|
| old_path | string | query | 是 | 原路径 |
| new_name | string | query | 是 | 新名称 |
```bash
curl -X POST "/api/v1/file-manager/rename?old_path=projects/old-name.pdf&new_name=new-name.pdf"
```
响应示例:
```json
{
"success": true,
"message": "重命名成功",
"old_path": "projects/old-name.pdf",
"new_path": "projects/new-name.pdf"
}
```
---
## 7. 移动文件或文件夹
**POST** `/api/v1/file-manager/move`
| 参数 | 类型 | 位置 | 必填 | 说明 |
|------|------|------|------|------|
| source_path | string | query | 是 | 源路径 |
| target_path | string | query | 是 | 目标路径 |
```bash
curl -X POST "/api/v1/file-manager/move?source_path=projects/a.pdf&target_path=projects/sub/a.pdf"
```
响应示例:
```json
{
"success": true,
"message": "移动成功",
"source_path": "projects/a.pdf",
"target_path": "projects/sub/a.pdf"
}
```
---
## 8. 复制文件或文件夹
**POST** `/api/v1/file-manager/copy`
| 参数 | 类型 | 位置 | 必填 | 说明 |
|------|------|------|------|------|
| source_path | string | query | 是 | 源路径 |
| target_path | string | query | 是 | 目标路径 |
```bash
curl -X POST "/api/v1/file-manager/copy?source_path=projects/a.pdf&target_path=projects/a-copy.pdf"
```
响应示例:
```json
{
"success": true,
"message": "复制成功",
"source_path": "projects/a.pdf",
"target_path": "projects/a-copy.pdf"
}
```
---
## 9. 搜索文件
**GET** `/api/v1/file-manager/search`
| 参数 | 类型 | 位置 | 必填 | 说明 |
|------|------|------|------|------|
| query | string | query | 是 | 搜索关键词(匹配文件名) |
| path | string | query | 否 | 搜索路径,为空则搜索所有支持目录 |
| file_type | string | query | 否 | 文件类型过滤(如 `.pdf` |
```bash
curl -X GET "/api/v1/file-manager/search?query=report&path=projects&file_type=.pdf"
```
响应示例:
```json
{
"success": true,
"query": "report",
"path": "projects",
"results": [
{
"name": "report.pdf",
"path": "projects/report.pdf",
"type": "file"
}
],
"total": 1
}
```
---
## 10. 读取文件内容
**GET** `/api/v1/file-manager/read`
| 参数 | 类型 | 位置 | 必填 | 说明 |
|------|------|------|------|------|
| path | string | query | 是 | 文件相对路径 |
```bash
curl -X GET "/api/v1/file-manager/read?path=projects/config.json"
```
响应示例:
```json
{
"success": true,
"content": "{\"key\": \"value\"}",
"path": "projects/config.json",
"size": 16,
"modified": 1700000000.0,
"encoding": "utf-8",
"mime_type": "application/json"
}
```
> 限制:最大 10MB。自动尝试 utf-8 / gbk / gb2312 / latin-1 编码。
---
## 11. 保存文件内容
**POST** `/api/v1/file-manager/save`
请求方式JSON
| 参数 | 类型 | 位置 | 必填 | 说明 |
|------|------|------|------|------|
| path | string | body | 是 | 文件相对路径 |
| content | string | body | 是 | 文件内容 |
```bash
curl -X POST "/api/v1/file-manager/save" \
-H "Content-Type: application/json" \
-d '{"path": "projects/config.json", "content": "{\"key\": \"new-value\"}"}'
```
响应示例:
```json
{
"success": true,
"message": "文件保存成功",
"path": "projects/config.json",
"size": 20,
"modified": 1700000000.0,
"encoding": "utf-8"
}
```
> 限制:最大 5MB。保存前自动创建备份写入失败时自动回滚。
---
## 12. 获取文件/文件夹详细信息
**GET** `/api/v1/file-manager/info/{file_path}`
| 参数 | 类型 | 位置 | 必填 | 说明 |
|------|------|------|------|------|
| file_path | string | path | 是 | 文件或文件夹路径 |
```bash
curl -X GET "/api/v1/file-manager/info/projects/report.pdf"
```
响应示例:
```json
{
"success": true,
"info": {
"name": "report.pdf",
"path": "projects/report.pdf",
"type": "file",
"size": 102400,
"modified": 1700000000.0,
"created": 1699000000.0,
"permissions": "644",
"mime_type": "application/pdf",
"preview": "文件前1000字符预览..."
}
}
```
> 小于 1MB 的文本文件会包含 `preview` 字段。
---
## 13. 下载文件夹为 ZIP
**POST** `/api/v1/file-manager/download-folder-zip`
请求方式JSON
| 参数 | 类型 | 位置 | 必填 | 说明 |
|------|------|------|------|------|
| path | string | body | 是 | 文件夹路径 |
```bash
curl -X POST "/api/v1/file-manager/download-folder-zip" \
-H "Content-Type: application/json" \
-d '{"path": "projects/dataset"}' -o dataset.zip
```
响应ZIP 文件二进制流(`application/zip`)。
> 限制:最大 500MB最多 10000 个文件。
---
## 14. 批量下载为 ZIP
**POST** `/api/v1/file-manager/download-multiple-zip`
请求方式JSON
| 参数 | 类型 | 位置 | 必填 | 说明 |
|------|------|------|------|------|
| paths | string[] | body | 是 | 文件/文件夹路径数组 |
| filename | string | body | 否 | ZIP 文件名,默认 `batch_download.zip` |
```bash
curl -X POST "/api/v1/file-manager/download-multiple-zip" \
-H "Content-Type: application/json" \
-d '{"paths": ["projects/a.pdf", "projects/sub"], "filename": "export.zip"}' \
-o export.zip
```
响应ZIP 文件二进制流(`application/zip`)。
> 限制:最大 500MB最多 10000 个文件。
---
## 15. 批量操作
**POST** `/api/v1/file-manager/batch-operation`
请求方式JSON操作数组
支持操作类型:`delete` / `move` / `copy`
```bash
curl -X POST "/api/v1/file-manager/batch-operation" \
-H "Content-Type: application/json" \
-d '[
{"type": "delete", "path": "projects/old.pdf"},
{"type": "move", "source_path": "projects/a.pdf", "target_path": "projects/archive/a.pdf"},
{"type": "copy", "source_path": "projects/b.pdf", "target_path": "projects/backup/b.pdf"}
]'
```
响应示例:
```json
{
"success": true,
"results": [
{"type": "delete", "success": true, "message": "删除成功"},
{"type": "move", "success": true, "message": "移动成功"},
{"type": "copy", "success": true, "message": "复制成功"}
],
"total": 3,
"successful": 3
}
```
---
## 通用说明
- **路径约束**:所有路径必须以 `projects``prompt` 开头,否则返回 400
- **安全机制**:路径经过规范化处理,防止目录遍历攻击
- **隐藏文件**:以 `.` 开头的文件/目录在列出和搜索时自动跳过
- **错误响应格式**
```json
{
"detail": "错误描述信息"
}
```