体育直播系统短视频上传流程:七牛云对接的实现思路和核心代码示例

简介: 东莞梦幻网络科技体育直播系统实现短视频上传功能,基于ThinkPHP+MySQL+Redis+七牛云架构。流程包括前端获取上传凭证、客户端上传视频至七牛云、七牛回调服务器验证签名并入库,涵盖上传策略、回调验证与存储路径规范。核心代码展示如何生成上传Token、前端上传及回调处理,确保安全高效上传。

“东莞梦幻网络科技”体育直播系统的短视频上传流程,与七牛云对接的实现思路和核心代码示例,包括上传签名、回调验证和存储路径规范。使用 ThinkPHP + MySQL + Redis + 七牛云架构。


一、上传流程概览

短视频上传涉及三步:前端拿到上传凭证 → 客户端上传视频 → 七牛云回调服务器确认入库。

流程图示意:

  1. 前端请求上传凭证

    • 前端调用接口(/api/video/getUploadToken
    • 后端生成七牛上传凭证(UploadToken),并返回给前端
    • Token 包含上传策略、过期时间、回调 URL 等信息
  2. 客户端上传视频到七牛云

    • 使用七牛官方 SDK 或表单直传
    • 上传时附带上传凭证
  3. 七牛回调服务器

    • 七牛上传完成后调用回调 URL
    • 后端验证签名是否合法(防伪造)
    • 将视频信息写入数据库(路径、大小、用户ID等)
    • 返回 200 OK

二、实现思路

1. 后端生成上传凭证

核心思路

  • 使用七牛云 SDK 生成上传 token
  • 设置上传策略:

    • callbackUrl → 七牛回调 URL
    • callbackBody → 回调参数(文件名、hash、用户ID等)
    • saveKey → 视频存储路径规范(例如 video/{userId}/{yyyyMMdd}/{random}.mp4

ThinkPHP 部分代码(PHP)

use Qiniu\Auth;

class VideoController extends Controller
{
   
    public function getUploadToken()
    {
   
        $accessKey = config('qiniu.accessKey');
        $secretKey = config('qiniu.secretKey');
        $bucket = config('qiniu.bucket');

        $auth = new Auth($accessKey, $secretKey);

        // 存储路径规范
        $userId = session('user_id');
        $saveKey = "video/{$userId}/".date('Ymd')."/\$(fname)";

        $policy = [
            'callbackUrl' => config('app.url').'/api/video/callback',
            'callbackBody' => 'filename=$(fname)&size=$(fsize)&hash=$(etag)&user_id='.$userId,
            'saveKey' => $saveKey
        ];

        $token = $auth->uploadToken($bucket, null, 3600, $policy);

        return json(['uptoken' => $token, 'saveKey' => $saveKey]);
    }
}

2. 前端上传视频

实现思路

  • 用七牛提供的 JS SDK(qiniu-js)和 H5 FormData + Ajax 上传
  • 上传时需附带后端返回的 uptoken
  • 上传完成自动触发七牛回调

部分 JS:

const file = document.getElementById('videoFile').files[0];
const formData = new FormData();
formData.append('file', file);
formData.append('token', uploadToken); // 后端返回的 token

fetch('https://upload.qiniup.com/', {
   
    method: 'POST',
    body: formData
})
.then(res => res.json())
.then(data => {
   
    console.log('上传完成', data);
})
.catch(err => console.error(err));

3. 七牛云回调验证

核心思路

  • 七牛回调会带 Authorization Header
  • 使用七牛 SDK 验证签名是否正确
  • 验证通过后,将视频信息写入数据库

ThinkPHP 部分代码:

use Qiniu\Http\Client;
use Qiniu\Auth;

class VideoController extends Controller
{
   
    public function callback()
    {
   
        $accessKey = config('qiniu.accessKey');
        $secretKey = config('qiniu.secretKey');

        $auth = new Auth($accessKey, $secretKey);

        $body = file_get_contents("php://input");
        $headers = getallheaders();

        if (!$auth->verifyCallback($headers, $body, config('qiniu.callbackUrl'))) {
   
            return json(['status' => 'fail', 'msg' => '签名验证失败'], 403);
        }

        $data = json_decode($body, true);
        $videoData = [
            'user_id' => $data['user_id'],
            'filename' => $data['filename'],
            'hash' => $data['hash'],
            'size' => $data['size'],
            'path' => "https://cdn.example.com/{$data['filename']}",
            'created_at' => time(),
        ];

        db('videos')->insert($videoData);

        return json(['status' => 'success']);
    }
}

4. 存储路径规范

video/{userId}/{yyyyMMdd}/{uuid}.mp4
  • 用户 ID 分类目录
  • 日期目录方便归档和清理
  • 文件名使用原始文件名或 UUID 避免重复
  • CDN 域名访问路径:https://cdn.example.com/video/xxx/xxx.mp4

5. 总结

  1. 前端请求后端获取上传 token(带回调和存储规则)
  2. 前端用 token 上传文件到七牛
  3. 七牛回调后端接口
  4. 后端验证签名 → 写入数据库 → 返回成功
  5. 视频路径规范 + CDN 分发,方便播放和管理
    微信截图_20250820140036.png
相关文章
|
2月前
|
缓存 前端开发 NoSQL
体育赛事直播系统中 VIP会员功能 开发实现思路及核心实现代码示例
东莞梦幻网络科技基于ThinkPHP+MySQL+Redis架构,实现体育直播平台VIP会员系统。涵盖VIP开通流程、权限控制、标识展示等功能。用户选择套餐并支付后,系统更新VIP状态并缓存权限信息,前端通过JWT+Redis验证权限,展示VIP标识与权益。数据库设计清晰,支持多种VIP等级与权限配置,代码示例完整,便于快速集成与扩展。
|
2月前
|
消息中间件 NoSQL 关系型数据库
体育直播系统积分流水与风控开发:防刷、防伪与限频实现
本案例分享东莞梦幻网络科技体育直播系统的积分流水与风控策略设计,涵盖防刷、防伪、限频三大层面,结合ThinkPHP+MySQL+Redis+WebSocket技术栈,实现积分透明记录、接口限流、设备识别与行为分析,保障积分系统安全与稳定。
|
21天前
|
人工智能 测试技术 API
谁说 WebSocket 调试难?Windows 上的“秘密武器”都在这儿,速占先机
从 Apifox 这样集大成者,到 Websocat 这样专注于命令行极致体验的工具,再到 WebSocket King 的开源灵活,以及 Postman 的广泛适用性和 WebSocket.org Toolkit 的即时性,它们共同构成了 WebSocket 开发生态的重要支撑。
|
2月前
|
存储 JSON 安全
体育直播平台任务模块开发详解:实现签到、分享、邀请注册激励闭环设计思路
本文详解东莞梦幻网络科技体育直播平台的用户任务系统设计,涵盖签到、分享、邀请注册等任务流程,以及积分奖励机制、技术架构与风控策略,展现任务系统如何提升用户活跃与平台增长。
|
21天前
|
数据可视化 测试技术 API
从接口性能到稳定性:这些API调试工具,让你的开发过程事半功倍
在软件开发中,接口调试与测试对接口性能、稳定性、准确性及团队协作至关重要。随着开发节奏加快,传统方式已难满足需求,专业API工具成为首选。本文介绍了Apifox、Postman、YApi、SoapUI、JMeter、Swagger等主流工具,对比其功能与适用场景,并推荐Apifox作为集成度高、支持中文、可视化强的一体化解决方案,助力提升API开发与测试效率。
|
2月前
|
存储 前端开发 测试技术
IDEA 用户惊叹:API 文档还能这样一键生成?
在日常开发中,API 文档编写和维护耗时繁琐。本文介绍如何通过 Apifox IDEA 插件,一键实现接口文档的自动生成与同步,提升开发效率,优化团队协作。
|
14天前
|
人工智能 安全 架构师
告别旅行规划的"需求文档地狱"!这个AI提示词库,让你像调API一样定制完美旅程
作为开发者,旅行规划如同“需求地狱”:信息碎片、需求多变、缺乏测试。本文提出一套“企业级”AI提示词库,将模糊需求转化为结构化“API请求”,实现标准化输入输出,让AI成为你的专属旅行架构师,30分钟生成专业定制方案,提升决策质量,降低90%时间成本。
313 129
|
20天前
|
存储 JSON 安全
加密和解密函数是如何实现的?
加密和解密函数是如何实现的?
281 123
|
1月前
|
移动开发 前端开发 JavaScript
有哪些技术可以实现H5页面在折叠屏上的适配?
有哪些技术可以实现H5页面在折叠屏上的适配?
238 123
|
2月前
|
JSON API 数据格式
深度分析大麦网API接口,用Python脚本实现
大麦网为国内领先演出票务平台,提供演唱会、话剧、体育赛事等票务服务。本文基于抓包分析其非官方接口,并提供Python调用方案,涵盖演出列表查询、详情获取及城市列表获取。需注意非官方接口存在稳定性风险,使用时应遵守平台规则,控制请求频率,防范封禁与法律风险。适用于个人学习、演出信息监控等场景。