SimpleUploadWeb/main.go
2025-12-05 16:47:00 +08:00

94 lines
1.8 KiB
Go

package main
import (
"fmt"
"os"
"path/filepath"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
// 设置上传文件夹
uploadDir := "./uploads"
os.MkdirAll(uploadDir, 0755)
// 加载模板
r.LoadHTMLGlob("templates/*")
// 首页:列出文件
r.GET("/", func(c *gin.Context) {
var files []string
filepath.Walk(uploadDir, func(path string, info os.FileInfo, err error) error {
if !info.IsDir() {
files = append(files, info.Name())
}
return nil
})
c.HTML(200, "index.html", gin.H{
"files": files,
})
})
// 上传接口
r.POST("/upload", func(c *gin.Context) {
form, err := c.MultipartForm()
if err != nil {
c.JSON(400, gin.H{"error": "Invalid form data"})
return
}
files := form.File["files"]
if len(files) == 0 {
c.JSON(400, gin.H{"error": "No files uploaded"})
return
}
for _, file := range files {
dst := filepath.Join(uploadDir, file.Filename)
if err := c.SaveUploadedFile(file, dst); err != nil {
c.JSON(500, gin.H{"error": err.Error()})
return
}
}
c.JSON(200, gin.H{
"message": fmt.Sprintf("Uploaded %d files", len(files)),
})
})
// 删除文件
r.DELETE("/delete/:filename", func(c *gin.Context) {
filename := c.Param("filename")
path := filepath.Join(uploadDir, filename)
if _, err := os.Stat(path); os.IsNotExist(err) {
c.JSON(404, gin.H{"error": "File not found"})
return
}
if err := os.Remove(path); err != nil {
c.JSON(500, gin.H{"error": err.Error()})
return
}
c.JSON(200, gin.H{"message": "Deleted"})
})
// 下载接口
r.GET("/download/:filename", func(c *gin.Context) {
filename := c.Param("filename")
filepath := filepath.Join(uploadDir, filename)
c.FileAttachment(filepath, filename)
})
r.Run("0.0.0.0:8080")
fmt.Println("启动")
}