一个简单的文件服务器,使用 Go 和 Gin 框架构建,支持文件上传、下载和静态文件服务。
- 文件上传:支持普通文件上传和分片上传(multipart upload)
- 文件下载:通过 HTTP GET 请求下载文件
- 静态文件服务:自动服务数据目录中的文件
- API 认证:上传操作需要 admin-api-token 认证
- 跨平台支持:支持 Linux 和 macOS 的 amd64 和 arm64 架构
确保你已经安装了 Go 1.22 或更高版本。
git clone <repository-url>
cd simple-file-server
make构建完成后,二进制文件将在 build/ 目录中生成。
确保你已经安装了 Docker。
docker build -t simple-file-server .
docker run -p 60088:60088 --rm \
-v $(pwd)/data-docker:/data:rw \
-v $(pwd)/config.json:/config.json simple-file-server从 release 页面下载适合你平台的二进制文件。
服务器通过 config.json 文件进行配置:
{
"debug": false,
"port": 60088,
"apiToken": "your-admin-api-token",
"tempDir": "./temp",
"dataDir": "./data"
}debug: 是否启用调试模式port: 服务器监听端口apiToken: 管理员 API 令牌,用于上传操作tempDir: 临时文件目录dataDir: 数据文件存储目录
./simple-file-serverdocker run -p 60088:60088 -v $(pwd)/data:/root/data -v $(pwd)/temp:/root/temp simple-file-server服务器将在配置的端口上启动,并开始监听请求。
检查服务器状态。
- URL:
/_admin/ping - Method: GET
- Response:
{"code": 0, "msg": "ok", "data": "ok"}
上传单个文件。
- URL:
/_admin/upload - Method: POST
- Headers:
admin-api-token: 管理员令牌
- Form Data:
file: 要上传的文件filePath: 文件保存路径(必需)
- Response:
{"code": 0, "msg": "ok", "data": {"filePath": "path/to/file"}}
初始化分片上传。
- URL:
/_admin/upload/multipart_init - Method: POST
- Headers:
admin-api-token: 管理员令牌Content-Type: application/json
- Body:
{ "filePath": "example.txt", "totalParts": 10, "totalSize": 10485760 } - Response:
{"code": 0, "msg": "ok", "data": {"uploadId": "123456789"}}
上传文件的一个分片。
- URL:
/_admin/upload/multipart_upload - Method: POST
- Headers:
admin-api-token: 管理员令牌
- Form Data:
uploadId: 上传 IDpartNumber: 分片编号file: 分片文件
- Response:
{"code": 0, "msg": "ok", "data": "ok"}
完成分片上传并合并文件。
- URL:
/_admin/upload/multipart_end - Method: POST
- Headers:
admin-api-token: 管理员令牌Content-Type: application/json
- Body:
{ "uploadId": "123456789" } - Response:
{"code": 0, "msg": "ok", "data": {"filePath": "example.txt"}}
中止分片上传并清理临时文件。
- URL:
/_admin/upload/abort - Method: POST
- Headers:
admin-api-token: 管理员令牌Content-Type: application/json
- Body:
{ "uploadId": "123456789" } - Response:
{"code": 0, "msg": "ok", "data": "ok"}
检查指定文件是否存在。
- URL:
/_admin/has - Method: POST
- Headers:
admin-api-token: 管理员令牌Content-Type: application/json
- Body:
{ "path": "path/to/file.txt" } - Response:
{"code": 0, "msg": "ok", "data": true}或{"code": 0, "msg": "ok", "data": false}
获取指定文件的大小。
- URL:
/_admin/size - Method: POST
- Headers:
admin-api-token: 管理员令牌Content-Type: application/json
- Body:
{ "path": "path/to/file.txt" } - Response:
{"code": 0, "msg": "ok", "data": {"size": 12345}}(文件大小字节数)
获取指定文件的内容。
- URL:
/_admin/get - Method: POST
- Headers:
admin-api-token: 管理员令牌Content-Type: application/json
- Body:
{ "path": "path/to/file.txt" } - Response:
二进制数据
移动文件到新位置。
- URL:
/_admin/move - Method: POST
- Headers:
admin-api-token: 管理员令牌Content-Type: application/json
- Body:
{ "from": "old/path/file.txt", "to": "new/path/file.txt" } - Response:
{"code": 0, "msg": "ok", "data": "ok"}
删除指定文件。
- URL:
/_admin/delete - Method: POST
- Headers:
admin-api-token: 管理员令牌Content-Type: application/json
- Body:
{ "path": "path/to/file.txt" } - Response:
{"code": 0, "msg": "ok", "data": "ok"}
下载文件。
- URL:
/{fileName} - Method: GET
- Response: 文件内容