Skip to content

WentUrc/Rd-imviead

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rdimviead - 随机媒体后端(Go)

一个极简的图片/音频/视频随机分发服务:

  • 框架: Gin
  • 数据库: SQLite(modernc.org/sqlite,纯 Go、无需系统依赖)
  • 特性: 启动扫描 MEDIA_ROOT 自动入库;随机获取单个/批量;文件直出(支持常规浏览器播放);健康检查;CORS

快速开始(Windows PowerShell)

# 可选:如拉依赖受限,先设置代理镜像
$env:GOPROXY="https://goproxy.cn,https://goproxy.io,https://mirrors.aliyun.com/goproxy/,direct"
$env:GOSUMDB="sum.golang.google.cn"

# 运行参数
$env:LISTEN_ADDR=":8080"
$env:MEDIA_ROOT="media"
$env:DATABASE_URL="file:media.db?cache=shared&mode=rwc&_fk=1"

# 安装依赖并运行
go mod tidy
go run ./cmd/server

将图片/音频/视频文件放入 media/ 目录(允许子目录),服务启动时会自动扫描入库(按文件后缀分类)。


API

  • 健康检查:GET /healthz
  • 随机获取:GET /api/v1/random?type=image|audio|video&count=1..50&exclude=1,2,3
    • 返回单条:{ item, url }
    • 返回多条:{ items: [{ item, url }, ...] }
  • 查询元数据:GET /api/v1/media/:id
  • 获取文件:GET /api/v1/media/:id/file

示例(获取 5 张随机图片,排除 id=1,2):

curl "http://localhost:8080/api/v1/random?type=image&count=5&exclude=1,2"

支持的文件类型

  • 图片:jpg、jpeg、png、gif、webp、bmp、tiff
  • 音频:mp3、wav、flac、aac、ogg、m4a
  • 视频:mp4、mkv、mov、avi、webm

配置项(环境变量)

  • LISTEN_ADDR:监听地址(默认 :8080
  • MEDIA_ROOT:媒体根目录(默认 media
  • DATABASE_URL:SQLite DSN(默认 file:media.db?cache=shared&mode=rwc&_fk=1

项目结构

cmd/server/        # 程序入口
internal/api/      # 路由与处理器
internal/config/   # 配置加载
internal/scanner/  # 启动时扫描入库
internal/storage/  # DB 打开与迁移
internal/media/    # 领域模型

已知限制与后续规划

  • 目前随机采用 SQLite 的 ORDER BY RANDOM(),适合小规模;后续可切换为“密集 id 抽样/预生成池”。
  • 仅基于后缀分类,未做深度媒体探测(时长/尺寸等元数据可后续接入 ffprobe/libvips)。
  • 文件直出,未接入对象存储与预签名 URL;上线建议放到 CDN。

License

遵循仓库内 LICENSE 文件。

About

Randomly display images, videos and audio.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages