94 lines
1.8 KiB
Go
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("启动")
|
|
}
|