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

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

视频可以正常播放

可以跳转进度条

暂停等操作

相关推荐
future141211 分钟前
项目开发日记
前端·学习·c#·游戏开发
汪子熙20 分钟前
CSS 中 td:last-child a 选择器详解
前端·javascript
北北~Simple34 分钟前
第一次搭建数据库
服务器·前端·javascript·数据库
GanGuaGua40 分钟前
Vue3常用指令
前端·javascript·vue.js
欧阳天风41 分钟前
录音实时上传
前端·javascript
江号软件分享1 小时前
从DNS到防火墙:NetDisabler多策略断网方法详解
前端
灵犀学长1 小时前
解锁HTML5页面生命周期API:前端开发的新视角
前端·html·html5
江号软件分享1 小时前
轻松解决Office版本冲突问题:卸载是关键
前端
致博软件F2BPM1 小时前
Element Plus和Ant Design Vue深度对比分析与选型指南
前端·javascript·vue.js
慧一居士2 小时前
flex 布局完整功能介绍和示例演示
前端