Some checks failed
部署管理后台 / 🧪 测试和构建 (push) Failing after 1m5s
部署管理后台 / 🔒 安全扫描 (push) Has been skipped
部署后端服务 / 🧪 测试后端 (push) Failing after 3m13s
部署前端网站 / 🧪 测试和构建 (push) Failing after 2m10s
部署管理后台 / 🚀 部署到生产环境 (push) Has been skipped
部署后端服务 / 🚀 构建并部署 (push) Has been skipped
部署管理后台 / 🔄 回滚部署 (push) Has been skipped
部署前端网站 / 🚀 部署到生产环境 (push) Has been skipped
部署后端服务 / 🔄 回滚部署 (push) Has been skipped
- 后端:应用 go fmt 自动格式化,统一代码风格 - 前端:更新 API 配置,完善类型安全 - 所有代码符合项目规范,准备生产部署
54 lines
1.2 KiB
Go
54 lines
1.2 KiB
Go
package photo
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/zeromicro/go-zero/rest/httpx"
|
|
"photography-backend/internal/logic/photo"
|
|
"photography-backend/internal/svc"
|
|
"photography-backend/internal/types"
|
|
)
|
|
|
|
// 上传照片
|
|
func UploadPhotoHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
// 解析 multipart form
|
|
err := r.ParseMultipartForm(32 << 20) // 32MB
|
|
if err != nil {
|
|
httpx.ErrorCtx(r.Context(), w, err)
|
|
return
|
|
}
|
|
|
|
// 获取文件
|
|
file, header, err := r.FormFile("file")
|
|
if err != nil {
|
|
httpx.ErrorCtx(r.Context(), w, err)
|
|
return
|
|
}
|
|
defer file.Close()
|
|
|
|
// 获取表单参数
|
|
req := types.UploadPhotoRequest{
|
|
Title: r.FormValue("title"),
|
|
Description: r.FormValue("description"),
|
|
}
|
|
|
|
// 解析 category_id
|
|
if categoryIdStr := r.FormValue("category_id"); categoryIdStr != "" {
|
|
var categoryId int64
|
|
if _, err := fmt.Sscanf(categoryIdStr, "%d", &categoryId); err == nil {
|
|
req.CategoryId = categoryId
|
|
}
|
|
}
|
|
|
|
l := photo.NewUploadPhotoLogic(r.Context(), svcCtx)
|
|
resp, err := l.UploadPhoto(&req, file, header)
|
|
if err != nil {
|
|
httpx.ErrorCtx(r.Context(), w, err)
|
|
} else {
|
|
httpx.OkJsonCtx(r.Context(), w, resp)
|
|
}
|
|
}
|
|
}
|