Files
jiang13-forum/routers/api/media.go
freefire 3f50316ad0 fix: 完成 Gitea 目录改组收尾(import、构建与 LICENSE)
同步包路径与路由,去掉 SPA 构建步骤,对齐 Gitea 式 LICENSE,并更新规格/规则与占位 SSR。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-29 04:01:20 +08:00

71 lines
1.7 KiB
Go

package api
import (
"net/http"
"strconv"
"strings"
"github.com/gin-gonic/gin"
)
// APIAdminMedia 列出媒体资源
func (h *Handlers) APIAdminMedia(c *gin.Context) {
if h.Store == nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "上传存储未初始化"})
return
}
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
size, _ := strconv.Atoi(c.DefaultQuery("size", "24"))
category := c.DefaultQuery("category", "all")
query := c.Query("q")
result, err := h.Store.ListMedia(category, query, page, size)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, result)
}
// APIAdminDeleteMedia 批量删除媒体
func (h *Handlers) APIAdminDeleteMedia(c *gin.Context) {
if h.Store == nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "上传存储未初始化"})
return
}
var req struct {
URLs []string `json:"urls"`
URL string `json:"url"`
}
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "参数错误"})
return
}
urls := make([]string, 0, len(req.URLs)+1)
for _, u := range req.URLs {
u = strings.TrimSpace(u)
if u != "" {
urls = append(urls, u)
}
}
if u := strings.TrimSpace(req.URL); u != "" {
urls = append(urls, u)
}
if len(urls) == 0 {
c.JSON(http.StatusBadRequest, gin.H{"error": "请选择要删除的文件"})
return
}
if len(urls) > 100 {
c.JSON(http.StatusBadRequest, gin.H{"error": "单次最多删除 100 个文件"})
return
}
n, err := h.Store.DeleteMedia(urls)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{
"message": "已删除 " + strconv.Itoa(n) + " 项媒体",
"deleted": n,
})
}