Acmetone是一个专业的音乐专辑发行管理平台,帮助音乐人按照规范格式准备和提交音乐作品,实现从创作到发行的全流程管理。平台提供专辑和歌曲管理、艺人信息维护、审核流程和格式检查等功能,确保音乐作品符合发行标准。
本项目采用前后端分离架构:
- 前端:基于Vue 3 + Vite构建的单页面应用
- 后端:基于Express + Sequelize的REST API服务
- 数据库:MySQL关系型数据库
- 用户注册与登录认证
- 基于JWT的身份验证
- 用户角色权限管理(普通用户/管理员)
- 专辑创建与元数据编辑
- 专辑封面上传与验证
- 专辑状态管理(草稿/待审核/已通过/已拒绝)
- 专辑审核流程,包含拒绝理由显示
- WAV格式音频文件上传与处理
- 歌曲元数据编辑
- 歌手信息关联
- 音频预览功能
- 艺人信息库维护
- 艺人信息修改申请与审核
- 多平台音乐链接管理与验证
- 卡片式与列表式双视图模式
- 音频文件格式验证
- 封面图片规格检查
- 平台链接格式验证
- 发行规则合规性检查
- 核心框架:Vue 3.x(组合式API)
- 构建工具:Vite
- 路由管理:Vue Router 4.x
- 状态管理:Pinia
- UI组件库:Element Plus
- HTTP客户端:Axios
- 样式处理:SCSS/CSS
- 服务框架:Express.js
- ORM:Sequelize
- 数据库:MySQL 8+
- 认证:JWT (JSON Web Token)
- 文件处理:Multer
- API文档:Swagger/OpenAPI
- 日志:Winston
系统包含以下核心数据模型及其关系:
-
User:用户信息,包含普通用户与管理员角色
- 字段:id, username, email, password, role, createdAt, updatedAt
-
Album:专辑信息
- 字段:id, title, type, releaseDate, coverImage, displayInfo, description, status, comment, submittedById, createdAt, updatedAt
- 关系:belongsTo User, hasMany Song
-
Song:歌曲元数据
- 字段:id, title, genre, language, wavFile, duration, trackNumber, albumId, createdAt, updatedAt
- 关系:belongsTo Album, belongsToMany Artist
-
Artist:艺人信息
- 字段:id, name, realName, netease, qq, kugou, kuwo, qishui, spotify, youtube, appleMusic, soundCloud, createdAt, updatedAt
- 关系:belongsToMany Song
-
ArtistEditRequest:艺人信息修改请求
- 字段:id, artistId, requestedById, songId, status, comment, reason, newName, newRealName, newNetease, newQq, newKugou, newKuwo, newQishui, newSpotify, newYoutube, newAppleMusic, newSoundCloud, createdAt, updatedAt
- 关系:belongsTo Artist, belongsTo User, belongsTo Song
- 卡片视图:美观直观的艺人信息展示
- 列表视图:高效的信息浏览与管理
- 支持按艺人名称搜索过滤
- 支持多种音乐平台链接格式验证
- 实时反馈链接有效性
- 提供格式错误提示和示例
- 专辑从草稿到发行的全流程管理
- 管理员审核界面,支持批量处理
- 拒绝理由反馈机制
- 用户可提交歌手信息修改申请
- 管理员审核机制
- 变更历史追踪
# 克隆仓库
git clone <repository-url>
# 进入前端目录
cd acmetone-frontend
# 安装依赖
npm install
# 启动开发服务器
npm run dev# 进入后端目录
cd acmetone-backend
# 安装依赖
npm install
# 配置数据库
# 编辑 src/config/db.js 文件,设置数据库连接参数
# 运行数据库迁移
npx sequelize-cli db:migrate
# 启动开发服务器
npm run devcd acmetone-frontend
npm run build
# 构建产物将生成在 dist 目录中
# 可以将其部署到任何静态文件服务器cd acmetone-backend
# 设置环境变量
export NODE_ENV=production
export DB_HOST=your_db_host
export DB_USER=your_db_user
export DB_PASS=your_db_password
export DB_NAME=your_db_name
export JWT_SECRET=your_jwt_secret
# 启动服务
npm start
# 或使用PM2进行进程管理
pm2 start src/app.js --name acmetone-api- Node.js 16+
- MySQL 8+
- 现代浏览器支持(Chrome, Firefox, Safari, Edge)
- 至少 2GB RAM 和 1GB 存储空间(用于音频文件存储)
本系统基于严格的音乐发行规则,详细规范见 Release_Rule.md 文件,主要包括:
- 文件结构规范:专辑和歌曲的目录组织方式
- 音频文件要求:WAV格式,至少16位深度,44.1KHz采样率
- 歌词文件规范:LRC格式,多语言支持
- 封面图片规范:JPG格式,3000x3000像素,内容合规性要求
- 艺人信息格式:平台链接格式,实名与艺名规范
如遇数据库连接错误,请检查:
- 数据库服务是否运行
- 连接参数是否正确
- 用户权限是否配置
如遇文件上传问题,请检查:
- 上传目录权限
- 文件大小限制配置
- 文件格式是否符合要求
如遇链接验证失败,请参考各平台的标准链接格式:
- 网易云音乐: https://music.163.com/#/artist?id=12345
- QQ音乐: https://y.qq.com/n/ryqq/singer/002J4UUk29y8BY
- 更多格式参见代码中的验证规则
欢迎贡献代码或提出建议,请遵循以下步骤:
- Fork 本仓库
- 创建功能分支 (
git checkout -b feature/amazing-feature) - 提交更改 (
git commit -m 'Add some amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 创建Pull Request
本项目采用 MIT 许可证 - 详情见 LICENSE 文件
我们对Acmetone网站的图片上传逻辑进行了以下优化:
-
统一使用Base64上传方式:
- 移除FormData上传方式
- 直接使用Base64方式上传图片
- 改进错误处理和重试机制
-
移除图片压缩:
- 按照要求移除了图片压缩代码
- 直接使用原始图片上传
-
增强Base64上传支持:
- 优化Base64图片上传处理
- 添加数据验证和错误处理
- 支持处理带Data URL前缀的Base64数据
- 使用异步文件写入提高性能
-
临时文件管理:
- 添加自动清理临时文件的功能
- 配置express-fileupload中间件自动清理临时文件
- 创建定期清理脚本
我们添加了以下清理脚本:
-
临时文件清理:
- 清理超过1小时未使用的临时文件
- 可以通过
node acmetone-backend/src/scripts/cleanup-schedule.js手动执行 - 建议添加到crontab定期执行
-
分片文件清理:
- 清理超过24小时的未完成分片上传
- 防止磁盘空间被大量分片文件占满
-
MP3缓存清理:
- 清理超过7天的MP3缓存文件
- 优化磁盘空间使用
如需立即清理临时文件,可以运行:
node acmetone-backend/src/scripts/cleanup-temp.js如需全面清理(临时文件、分片文件和MP3缓存),可以运行:
node acmetone-backend/src/scripts/cleanup-schedule.js