QQ扫一扫联系
一个简单的文件服务器,使用 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-server
docker 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: 上传 ID
partNumber: 分片编号
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: 文件内容