add file_manage doc
This commit is contained in:
parent
05e22391ed
commit
1321471202
435
docs/file_manage_apis.md
Normal file
435
docs/file_manage_apis.md
Normal file
@ -0,0 +1,435 @@
|
||||
# 文件管理 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": "错误描述信息"
|
||||
}
|
||||
```
|
||||
Loading…
Reference in New Issue
Block a user