1.main.go 代码
go
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
"os"
"time"
)
type Response struct {
Status string
Message string
Data 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
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
视频可以正常播放
可以跳转进度条
暂停等操作