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

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.xdnf.cn/news/15137.html

相关文章:

  • 计算机网络实验——以太网安全实验
  • 图解LeetCode:79递归实现单词搜索
  • 【个人笔记】负载均衡
  • 04-ES6
  • 自动驾驶数据集综述:统计特征、标注质量与未来展望
  • AI+低代码双引擎驱动:重构智能业务系统的产品逻辑
  • 《PyQt6-3D应用开发技术文档》
  • MySQL常用命令
  • STM32F103C8T6驱动无源蜂鸣器详解:从硬件设计到音乐播放
  • hive小文件问题
  • requestIdleCallback:解锁浏览器空闲时段的性能优化艺术
  • MatrixOne Intelligence v3.3 正式发布:结构化、自动化、可视化三重进化
  • 二分查找篇——寻找旋转排序数组中的最小值【LeetCode】
  • Spring Boot项目中大文件上传的优化策略与实践
  • C++的类中的虚拟继承【底层剖析(配图解)】
  • Android 13----在framworks层映射一个物理按键
  • SQL的初步学习(一)(以MySQL为例)
  • wpf使用webview2显示网页内容(最低兼容.net framework4.5.2)
  • 相机:以鼠标点为中心缩放(使用OpenGL+QT开发三维CAD)
  • 关于在html页面利用js操作liMarquee以及解决使用过程中出现的问题,附全屏切换相关代码
  • LINUX710 MYSQL
  • Oracle大表数据清理优化与注意事项详解
  • 深入理解机器学习
  • 无人机识别比赛记录与分析
  • CentOs 7 MySql8.0.23之前的版本主从复制
  • ESP32- 项目应用1 智能手表 #1
  • 2025.07.09华为机考真题解析-第三题300分
  • 开源!RAG竞技场(3):语义分割的RAG(Semantic Chunking RAG)
  • 解释sync.WaitGroup的用途和工作原理。在什么情况下应该使用它?
  • XSS(ctfshow)