# 文件分享 FileCodeBox 提供了简单易用的文件和文本分享功能。用户可以通过提取码安全地分享和获取文件。 ## 分享方式 FileCodeBox 支持两种分享方式: 1. **文本分享** - 直接分享文本内容,适合代码片段、配置文件等 2. **文件分享** - 上传文件进行分享,支持各种文件格式 ## 文本分享 ### 使用方法 1. 在首页选择「文本分享」标签 2. 在文本框中输入或粘贴要分享的内容 3. 选择过期方式和时间 4. 点击「分享」按钮 5. 获取提取码 ### 文本大小限制 ::: warning 注意 文本分享的最大内容大小为 **222KB**(227,328 字节)。如果内容超过此限制,建议使用文件分享方式。 ::: 文本内容大小按 UTF-8 编码计算,中文字符通常占用 3 个字节。 ### API 接口 **POST** `/share/text/` 请求参数: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | `text` | string | 是 | 要分享的文本内容 | | `expire_value` | int | 否 | 过期数值,默认 1 | | `expire_style` | string | 否 | 过期方式,默认 `day` | 响应示例: ```json { "code": 200, "detail": { "code": "123456" } } ``` ## 文件分享 ### 使用方法 1. 在首页选择「文件分享」标签 2. 点击上传区域或拖拽文件到上传区域 3. 选择过期方式和时间 4. 点击「上传」按钮 5. 获取提取码 ### 文件大小限制 默认单文件最大上传大小为 **10MB**。管理员可以通过 `uploadSize` 配置项修改此限制。 ::: tip 提示 如果需要上传大文件,请联系管理员启用分片上传功能,或调整 `uploadSize` 配置。 ::: ### 支持的上传方式 - **点击上传** - 点击上传区域选择文件 - **拖拽上传** - 将文件拖拽到上传区域 - **粘贴上传** - 从剪贴板粘贴图片(部分主题支持) ### API 接口 **POST** `/share/file/` 请求参数(multipart/form-data): | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | `file` | file | 是 | 要上传的文件 | | `expire_value` | int | 否 | 过期数值,默认 1 | | `expire_style` | string | 否 | 过期方式,默认 `day` | 响应示例: ```json { "code": 200, "detail": { "code": "654321", "name": "example.pdf" } } ``` ## 过期设置 FileCodeBox 支持多种灵活的过期方式: | 过期方式 | 参数值 | 说明 | |----------|--------|------| | 按天过期 | `day` | 文件在指定天数后过期 | | 按小时过期 | `hour` | 文件在指定小时后过期 | | 按分钟过期 | `minute` | 文件在指定分钟后过期 | | 永不过期 | `forever` | 文件永久有效 | | 按次数过期 | `count` | 文件在被下载指定次数后过期 | ::: info 说明 - 管理员可以通过 `expireStyle` 配置项控制用户可选的过期方式 - 管理员可以通过 `max_save_seconds` 配置项限制文件的最长保存时间 ::: ### 过期方式示例 ```bash # 文件 3 天后过期 expire_value=3, expire_style=day # 文件 12 小时后过期 expire_value=12, expire_style=hour # 文件 30 分钟后过期 expire_value=30, expire_style=minute # 文件永不过期 expire_value=1, expire_style=forever # 文件被下载 5 次后过期 expire_value=5, expire_style=count ``` ## 提取文件 ### 使用方法 1. 在首页的「提取文件」区域输入提取码 2. 点击「提取」按钮 3. 系统会显示文件信息(文件名、大小等) 4. 点击「下载」按钮下载文件,或直接查看文本内容 ### 提取码说明 - 提取码通常为 **6 位数字** - 永不过期的文件使用 **字母数字混合** 的提取码 - 提取码区分大小写(针对字母数字混合的情况) ### API 接口 **查询文件信息** **POST** `/share/select/` 请求参数: ```json { "code": "123456" } ``` 响应示例(文件): ```json { "code": 200, "detail": { "code": "123456", "name": "example.pdf", "size": 1048576, "text": "https://example.com/download/..." } } ``` 响应示例(文本): ```json { "code": 200, "detail": { "code": "123456", "name": "Text", "size": 1024, "text": "这是分享的文本内容..." } } ``` **直接下载文件** **GET** `/share/select/?code=123456` 此接口会直接返回文件内容,适合在浏览器中直接访问。 ## 分片上传(大文件) 对于大文件上传,FileCodeBox 支持分片上传功能。此功能需要管理员启用(`enableChunk=1`)。 ### 分片上传流程 ```mermaid sequenceDiagram participant C as 客户端 participant S as 服务器 C->>S: 1. 初始化上传 (POST /chunk/upload/init/) S-->>C: 返回 upload_id 和分片信息 loop 每个分片 C->>S: 2. 上传分片 (POST /chunk/upload/chunk/{upload_id}/{chunk_index}) S-->>C: 返回分片哈希 end C->>S: 3. 完成上传 (POST /chunk/upload/complete/{upload_id}) S-->>C: 返回提取码 ``` ### 1. 初始化上传 **POST** `/chunk/upload/init/` 请求参数: ```json { "file_name": "large_file.zip", "file_size": 104857600, "chunk_size": 5242880, "file_hash": "sha256_hash_of_file" } ``` | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | `file_name` | string | 是 | 文件名 | | `file_size` | int | 是 | 文件总大小(字节) | | `chunk_size` | int | 否 | 分片大小,默认 5MB | | `file_hash` | string | 是 | 文件的 SHA256 哈希值 | 响应示例: ```json { "code": 200, "detail": { "existed": false, "upload_id": "abc123def456", "chunk_size": 5242880, "total_chunks": 20, "uploaded_chunks": [] } } ``` ### 2. 上传分片 **POST** `/chunk/upload/chunk/{upload_id}/{chunk_index}` - `upload_id` - 初始化时返回的上传会话 ID - `chunk_index` - 分片索引,从 0 开始 请求体:分片文件数据(multipart/form-data) 响应示例: ```json { "code": 200, "detail": { "chunk_hash": "sha256_hash_of_chunk" } } ``` ### 3. 完成上传 **POST** `/chunk/upload/complete/{upload_id}` 请求参数: ```json { "expire_value": 1, "expire_style": "day" } ``` 响应示例: ```json { "code": 200, "detail": { "code": "789012", "name": "large_file.zip" } } ``` ### 断点续传 分片上传支持断点续传。如果上传中断,可以: 1. 重新调用初始化接口,使用相同的 `file_hash` 2. 服务器会返回已上传的分片列表 `uploaded_chunks` 3. 客户端只需上传未完成的分片 ## 错误处理 ### 常见错误码 | 错误码 | 说明 | 解决方案 | |--------|------|----------| | 403 | 文件大小超过限制 | 减小文件大小或联系管理员调整限制 | | 403 | 内容过多 | 文本超过 222KB,请使用文件分享 | | 403 | 上传频率限制 | 等待一段时间后重试 | | 404 | 文件不存在 | 检查提取码是否正确 | | 404 | 文件已过期 | 文件已过期或下载次数已用完 | ### 频率限制 为防止滥用,系统对上传和提取操作有频率限制: - **上传限制**:默认每分钟最多 10 次上传 - **错误限制**:默认每分钟最多 1 次错误尝试 ::: tip 提示 如果遇到频率限制,请等待限制时间窗口过后再重试。 ::: ## 下一步 - [配置说明](/guide/configuration) - 了解如何配置分享相关设置 - [存储配置](/guide/storage) - 了解文件存储方式 - [安全设置](/guide/security) - 了解安全相关配置 - [管理面板](/guide/management) - 了解如何管理分享的文件