当前位置: 首页 > news >正文

GO启动一个视频下载接口 前端可以边下边放

1.main.go 代码

package mainimport ("encoding/json""fmt""log""net/http""os""time"
)
type Response struct {Status  stringMessage stringData    string
}func main() {// 设置路由http.HandleFunc("/", homeHandler)http.HandleFunc("/api/video/", videoHandler)// 启动服务器port := ":8080"fmt.Printf("🚀 服务器运行中,访问地址: http://localhost%s\n", port)fmt.Println("=========================================")err := http.ListenAndServe(port, nil)if err != nil {log.Fatalf("❌ 启动服务器失败: %v", err)}
}// 主页处理器
func homeHandler(w http.ResponseWriter, r *http.Request) {if r.URL.Path != "/" {http.NotFound(w, r)return}response := Response{Status:  "success",Message: "欢迎使用用户API服务",Data:    "请访问 /api/users 获取用户数据",}sendJSON(w, http.StatusOK, response)
}// 获取视频
func videoHandler(w http.ResponseWriter, r *http.Request) {const videoDir = "./videos/"// 提取视频文件名path := r.URL.Path[len("/api/video/"):]if path == "" {http.Error(w, "Missing video filename", http.StatusBadRequest)return}filePath := videoDir + path_, err := os.Stat(filePath)if os.IsNotExist(err) {http.Error(w, "Video not found", http.StatusNotFound)return}if err != nil {log.Printf("Error getting file info: %v", err)http.Error(w, "Internal Server Error", http.StatusInternalServerError)return}// 设置响应头w.Header().Set("Content-Type", "video/mp4")w.Header().Set("Access-Control-Allow-Origin", "*") // 允许所有来源跨域访问w.Header().Set("Cache-Control", "max-age=3600, public")w.Header().Set("Accept-Ranges", "bytes")http.ServeFile(w, r, filePath)
}// 发送JSON响应
func sendJSON(w http.ResponseWriter, statusCode int, data interface{}) {w.Header().Set("Content-Type", "application/json")w.WriteHeader(statusCode)if err := json.NewEncoder(w).Encode(data); err != nil {log.Printf("❌ JSON编码失败: %v", err)http.Error(w, "Internal Server Error", http.StatusInternalServerError)}
}

1.1在main.go同级建一个videos文件夹放一个 tem1.mp4

2.前端代码

这里简单使用html

<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Document</title>
</head>
<body>
<video controls><source src="http://localhost:8080/api/video/tem1.mp4" type="video/mp4">您的浏览器不支持视频播放。
</video></body>
</html>

3.启动go服务

在这里插入图片描述

4.使用浏览器打开html

视频可以正常播放
可以跳转进度条
暂停等操作
在这里插入图片描述

http://www.lryc.cn/news/583890.html

相关文章:

  • Django中序列化与反序列化
  • 实现源图像到目标图像的转换(提示:RGB值互换,新R=旧G,新G=旧B,新B=旧R)
  • Redis数据库基础
  • JSZip 使用详解
  • vue3 td 标签优化时间显示
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | DoubleVerticalSlider(双垂直滑块)
  • JavaScript 树形菜单总结
  • SoC程序如何使用单例模式运行
  • vue3 el-table 列汉字 排序时排除 null 或空字符串的值
  • 第二章-AIGC入门-AI视频生成:几款实用AI视频生成工具全解析(7/36)
  • 2025年软件测试面试题,精选33道,附答案
  • 数据结构笔记10:排序算法
  • 【办公类-107-01】20250710视频慢速与视频截图
  • 用OpenCV标定相机内参应用示例(C++和Python)
  • window显示驱动开发—XR_BIAS 和 PresentDXGI
  • 图像亮度调整的简单实现
  • 0基础学Python系列【31】 详细讲解Python中SQLAlchemy包的用法:从入门到精通
  • k8s:安装 Helm 私有仓库ChartMuseum、helm-push插件并上传、安装Zookeeper
  • zookeeper etcd区别
  • 在 Mac 上安装 Java 和 IntelliJ IDEA(完整笔记)
  • macOS 上安装 Miniconda + Conda-Forge
  • 算法练习5-原地移除数组中所有的元素
  • 龙迅#LT8619B适用于HDMI转LVDS/RGB,芯片支持视频图像处理,OSD功能.
  • MacOS 终端(Terminal)配置显示日期时间
  • 在Docker中运行macOS的超方便体验!
  • 基于深度学习的自动调制识别网络(持续更新)
  • 【PTA数据结构 | C语言版】顺序队列的3个操作
  • 在 Mac 上使用 Git 拉取项目:完整指南
  • 【macos用镜像站体验】Claude Code入门使用教程和常用命令
  • 029_构造器重载与默认构造器