Skip to content

0x3ea/Kist

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Kist

轻量级私有文件网盘系统

技术栈

  • 后端: Go + Gin + MySQL
  • 前端: Vue 3 + ES Modules
  • 认证: JWT

功能特性

文件管理

  • 上传文件(支持批量上传、拖拽上传)
  • 下载文件
  • 删除文件/文件夹
  • 重命名文件/文件夹
  • 新建文件夹
  • 文件搜索(当前目录内)
  • 面包屑导航

安全特性

  • JWT 认证机制
  • 路径安全校验(防止目录遍历攻击)
  • 密码加密存储

项目结构

kist/
├── main.go                      # 程序入口
├── go.mod / go.sum              # Go 依赖管理
│
├── data/                        # 文件存储目录
│
├── static/                      # 前端静态资源
│   ├── index.html               # 主页面
│   ├── login.html               # 登录页面
│   ├── css/
│   │   └── style.css            # 样式文件
│   └── js/
│       ├── app.js               # 主入口
│       ├── api/
│       │   └── client.js        # API 请求封装
│       ├── composables/
│       │   ├── useUpload.js     # 上传逻辑
│       │   ├── useFiles.js      # 文件列表逻辑
│       │   └── useDialog.js     # 弹窗逻辑
│       └── utils/
│           └── format.js        # 格式化工具函数
│
└── src/
    ├── models/                  # 数据模型
    │   ├── sqlModels.go         # SQL 模型 (UserAccount, FileRecord)
    │   ├── requestModels.go     # 请求模型
    │   ├── responseModels.go    # 响应模型
    │   └── fileModels.go        # 文件信息模型
    │
    └── server/                  # 服务端代码
        ├── handlers/            # HTTP 处理器(薄层)
        │   ├── handler.go       # Handler 结构体
        │   ├── auth.go          # 认证中间件
        │   ├── upload.go        # 上传处理
        │   ├── download.go      # 下载处理
        │   ├── delete.go        # 删除处理
        │   ├── rename.go        # 重命名处理
        │   ├── folder.go        # 文件夹处理
        │   ├── fileInfo.go      # 文件列表处理
        │   └── utils.go         # (已迁移)
        │
        ├── services/            # 业务逻辑层
        │   └── file_service.go  # 文件服务(增删改查)
        │
        └── utils/               # 工具函数
            ├── id.go            # ID 生成(Snowflake + UUID)
            └── path.go          # 路径安全处理

架构说明

后端架构(三层)

┌─────────────────────────────────────────────────────────────┐
│                        HTTP Layer                            │
│                      (handlers/)                             │
│  职责:处理 HTTP 请求/响应,参数解析,调用 Service 层          │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                       Service Layer                          │
│                     (services/)                              │
│  职责:业务逻辑,数据库操作,事务管理                          │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                       Data Layer                             │
│                      (MySQL + GORM)                          │
└─────────────────────────────────────────────────────────────┘

前端架构(模块化)

static/js/
├── app.js           # 主入口,组装各模块
├── api/             # API 请求封装(Token 统一管理)
├── composables/     # 功能模块(Composables 模式)
└── utils/           # 工具函数

数据库设计

user_accounts(用户表)

字段 类型 说明
uid string(191) 主键
username varchar(10) 用户名(唯一)
password varchar(20) 密码
register_time datetime 注册时间

file_records(文件记录表)

字段 类型 说明
uuid string(191) 主键
uid string(191) 用户 ID
filename varchar(255) 文件名
filepath varchar(500) 文件路径
filesize bigint 文件大小
is_dir boolean 是否为文件夹
upload_time datetime 上传时间

快速开始

1. 安装依赖

go mod tidy

2. 配置数据库

CREATE DATABASE kist_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER '0x3ea'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON kist_db.* TO '0x3ea'@'localhost';
FLUSH PRIVILEGES;

数据库连接配置在 main.goconnectDB() 函数中。

3. 启动服务

go run .

服务运行在 http://localhost:8080

4. 登录

  • 测试账号: admin
  • 测试密码: 123456

API 接口

公开接口

  • GET / - 主页
  • GET /login - 登录页面
  • POST /login - 登录接口

认证接口(需要 JWT Token)

方法 路径 说明
POST /upload 上传文件
GET /download 下载文件
POST /delete 删除文件/文件夹
POST /rename 重命名文件/文件夹
POST /folder 创建文件夹
GET /files 获取文件列表

请求头格式:

Authorization: Bearer <token>

构建编译

go build -o kist.exe .

注意事项

  • 数据库结构通过 GORM AutoMigrate 自动创建
  • string 字段需显式指定 type:varchar(N),否则会变成 longtext
  • time.Time 字段必须显式赋值(如 time.Now()
  • 前端所有需要认证的请求都必须携带 Token
  • 文件存储在 ./data 目录,元数据存储在 MySQL

License

MIT

About

个人部署网盘

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors