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

视频可以正常播放

可以跳转进度条

暂停等操作

相关推荐
enoughisenough17 小时前
浏览器判断控制台是否开启
前端
Moment17 小时前
当前端开始做 Agent 后,我才知道 LangGraph 有多重要❗❗❗
前端·后端·面试
竹林81817 小时前
RainbowKit 快速集成多链钱包连接:从“连不上”到丝滑切换的踩坑实录
前端·javascript
Tomhex17 小时前
Go字符串拼接最佳实践
golang·go
小蜜蜂dry18 小时前
nestjs实战-登录、鉴权(一)
前端·后端·nestjs
农夫山泉不太甜18 小时前
WebSocket与SSE技术方案选型对比分析
前端
重阳微噪18 小时前
受够了空格翻页?我写了一个 Chrome 自动滚动插件,让你真正沉浸式阅读
前端
Awu122718 小时前
🍎用 pretext 搞定输入框动态宽度:一个困扰了我三天的 CSS 问题
前端
zs宝来了18 小时前
Go 内存管理:三色标记 GC 与逃逸分析
golang·go·后端技术
萑澈18 小时前
我用 Cloudflare 搭了一个 FlashInbox 临时邮箱
前端·next.js