Add files via upload

This commit is contained in:
QWQLwToo
2026-01-28 13:25:18 +08:00
committed by GitHub
parent 02f66ec447
commit 7030903eb6
77 changed files with 21573 additions and 0 deletions
+69
View File
@@ -0,0 +1,69 @@
package api
import (
"fmt"
"net/http"
"path/filepath"
"strings"
"time"
"home-vue-go/internal/config"
"github.com/gin-gonic/gin"
)
var allowedImageExtensions = map[string]bool{
".jpg": true,
".jpeg": true,
".png": true,
".gif": true,
".webp": true,
".avif": true,
".svg": true,
".bmp": true,
".ico": true,
}
func UploadFile(cfg *config.Config) gin.HandlerFunc {
return func(c *gin.Context) {
file, err := c.FormFile("file")
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "文件上传失败: " + err.Error()})
return
}
// 检查文件扩展名
ext := strings.ToLower(filepath.Ext(file.Filename))
if !allowedImageExtensions[ext] {
c.JSON(http.StatusBadRequest, gin.H{
"error": fmt.Sprintf("不支持的文件格式。支持的格式: %v", getKeys(allowedImageExtensions)),
})
return
}
// 生成唯一文件名
filename := fmt.Sprintf("%d%s", time.Now().UnixNano(), ext)
dst := filepath.Join(cfg.UploadDir, filename)
// 保存文件
if err := c.SaveUploadedFile(file, dst); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "文件保存失败: " + err.Error()})
return
}
// 返回文件URL(相对于uploads目录)
fileURL := fmt.Sprintf("/uploads/%s", filename)
c.JSON(http.StatusOK, gin.H{
"url": fileURL,
"path": fileURL,
})
}
}
func getKeys(m map[string]bool) []string {
keys := make([]string, 0, len(m))
for k := range m {
keys = append(keys, k)
}
return keys
}