3.5 KiB
3.5 KiB
V-Hono 文件上传系统 - 数据库集成
概述
V-Hono 文件上传系统现在集成了 SQLite 数据库来管理文件信息,支持文件去重、版本管理和元数据存储。
新功能
1. 文件路径格式更新
合并后的文件现在使用新的命名格式:
./uploads/files/{filehash}.{filetype}
例如:
./uploads/files/a1b2c3d4e5f6.txt./uploads/files/1234567890abcdef.jpg
2. 数据库表结构
CREATE TABLE file_info (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_uuid TEXT UNIQUE NOT NULL, -- 文件唯一标识符
file_hash TEXT NOT NULL, -- 文件哈希值
file_name TEXT NOT NULL, -- 原始文件名
file_size INTEGER NOT NULL, -- 文件大小
file_type TEXT NOT NULL, -- 文件扩展名
created_at INTEGER NOT NULL, -- 创建时间
updated_at INTEGER NOT NULL -- 更新时间
);
3. 文件去重逻辑
- 相同 hash + 相同文件名:更新现有记录
- 相同 hash + 不同文件名:创建新记录(支持同一文件的不同名称)
- 不同 hash:创建新记录
4. 新增 API 端点
获取所有文件信息
GET /api/files
根据文件UUID获取文件信息
GET /api/files/{uuid}
根据文件hash获取文件信息
GET /api/files/hash/{hash}
删除文件信息
DELETE /api/files/{uuid}
配置
在 ChunkUploadConfig 中添加了数据库配置:
pub struct ChunkUploadConfig {
// ... 其他配置
db_path string = './uploads/files.db' // 数据库文件路径
}
使用示例
1. 启动服务器
v run chunk_upload_example.v
2. 测试数据库功能
v run test_database.v
3. 上传文件
文件上传完成后,系统会:
- 将文件保存为
{filehash}.{filetype}格式 - 在数据库中记录文件信息
- 返回文件UUID
4. 查询文件信息
# 获取所有文件
curl http://localhost:8080/api/files
# 根据UUID获取文件信息
curl http://localhost:8080/api/files/{uuid}
# 根据hash获取文件信息
curl http://localhost:8080/api/files/hash/{hash}
数据库操作
插入或更新文件信息
file_info := db.insert_or_update_file(file_hash, file_name, file_size, file_type)
查询文件信息
// 根据hash查询
file_info := db.get_file_by_hash(file_hash)
// 根据UUID查询
file_info := db.get_file_by_uuid(file_uuid)
// 获取所有文件
files := db.get_all_files()
删除文件信息
db.delete_file(file_uuid)
依赖
项目现在依赖 vlang/sqlite 模块:
// v.mod
dependencies: ['vlang/sqlite']
文件结构
v-hono/
├── hono/
│ ├── database.v # 数据库管理模块
│ ├── upload.v # 上传模块(已更新)
│ └── ...
├── chunk_upload_example.v # 示例应用(已更新)
├── test_database.v # 数据库测试
└── uploads/
├── files/ # 最终文件目录
├── chunks/ # 分片文件目录
└── files.db # SQLite数据库文件
注意事项
- 数据库文件会自动创建在
uploads/目录下 - 文件去重基于文件hash,支持同一文件的不同名称
- 每个文件都有唯一的UUID,用于API访问
- 文件路径使用hash命名,避免文件名冲突
- 数据库操作失败不会影响文件上传功能