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

视频可以正常播放

可以跳转进度条

暂停等操作

相关推荐
陈随易12 分钟前
C++26 草案被否,二十八年来头一回
前端·后端·程序员
ZhengEnCi29 分钟前
Agent 工具怎么折叠海量输出才「爽」:Trae、Claude Code 的渐进式披露设计原理
前端·agent
IT_陈寒4 小时前
Redis内存暴涨,没想到是AOF重写捣的鬼
前端·人工智能·后端
ikoala4 小时前
让 Codex 自己查账:一个省 token 的小技巧
前端·后端·ai编程
ikoala4 小时前
AI 写页面像说明书,修 Bug 像贴膏药?把这两句话写进 AGENTS.md
前端·javascript·ai编程
AI视频工具指南4 小时前
用 AI 能做哪些视频?按想交付的作品选做法
人工智能·aigc·音视频
去伪存真6 小时前
AI Agent Harness 深度测评与技术选型实战
前端·agent
FRing039 小时前
vue2干货总结7(自定义指令、插槽、单页应用程序、路由的使用(VueRouter))
开发语言·前端·vue.js·vue2
希和202710 小时前
免费AI视频生成工具汇总(国内优先,适合做漫剧、短视频,Obsidian笔记版)
人工智能·笔记·音视频
JWASX10 小时前
【Go】map 源码解析 - group
后端·golang·map·源码分析