preview img

This commit is contained in:
2023-07-20 03:22:00 +08:00
parent 25a10301db
commit 8e20f10245
2 changed files with 40 additions and 17 deletions

17
main.go
View File

@@ -51,14 +51,15 @@ func main() {
r.HandleFunc("/api/users/{id}/like", routers.UsersItemLike).Methods("POST") // 添加一条喜欢 r.HandleFunc("/api/users/{id}/like", routers.UsersItemLike).Methods("POST") // 添加一条喜欢
r.HandleFunc("/api/users/{id}/like", routers.UsersItemUnlike).Methods("DELETE") // 移除一条喜欢 r.HandleFunc("/api/users/{id}/like", routers.UsersItemUnlike).Methods("DELETE") // 移除一条喜欢
r.HandleFunc("/api/models", routers.ModelsGet).Methods("GET") // 获取模型列表 r.HandleFunc("/api/models", routers.ModelsGet).Methods("GET") // 获取模型列表
r.HandleFunc("/api/models", routers.ModelsPost).Methods("POST") // 创建一条模型 r.HandleFunc("/api/models", routers.ModelsPost).Methods("POST") // 创建一条模型
r.HandleFunc("/api/models/update", routers.ModelsUpdate).Methods("GET") // 更新模型列表 r.HandleFunc("/api/models/update", routers.ModelsUpdate).Methods("GET") // 更新模型列表
r.HandleFunc("/api/models/{id}", routers.ModelItemGet).Methods("GET") // 获取一条模型 r.HandleFunc("/api/models/{id}", routers.ModelItemGet).Methods("GET") // 获取一条模型
r.HandleFunc("/api/models/{id}", routers.ModelItemPatch).Methods("PATCH") // 更新一条模型 r.HandleFunc("/api/models/{id}", routers.ModelItemPatch).Methods("PATCH") // 更新一条模型
r.HandleFunc("/api/models/{id}", routers.ModelItemDelete).Methods("DELETE") // 删除一条模型 r.HandleFunc("/api/models/{id}", routers.ModelItemDelete).Methods("DELETE") // 删除一条模型
r.HandleFunc("/api/models/{id}/like", routers.ModelsItemLike).Methods("POST") // 添加一条喜欢 r.HandleFunc("/api/models/{id}/like", routers.ModelsItemLike).Methods("POST") // 添加一条喜欢
r.HandleFunc("/api/models/{id}/like", routers.ModelsItemUnlike).Methods("DELETE") // 移除一条喜欢 r.HandleFunc("/api/models/{id}/like", routers.ModelsItemUnlike).Methods("DELETE") // 移除一条喜欢
r.HandleFunc("/api/models/{id}/preview/{filename}", routers.ModelsItemPreview).Methods("GET") // 获取预览图片
r.HandleFunc("/api/images", routers.ImagesGet).Methods("GET") // 获取图片列表 r.HandleFunc("/api/images", routers.ImagesGet).Methods("GET") // 获取图片列表
r.HandleFunc("/api/images", routers.ImagesPost).Methods("POST") // 创建一条图片 r.HandleFunc("/api/images", routers.ImagesPost).Methods("POST") // 创建一条图片

View File

@@ -12,6 +12,7 @@ import (
"main/utils" "main/utils"
"net/http" "net/http"
"os" "os"
"regexp"
"strconv" "strconv"
"github.com/gorilla/mux" "github.com/gorilla/mux"
@@ -233,6 +234,23 @@ func ModelItemGet(w http.ResponseWriter, r *http.Request) {
w.Write(utils.ToJSON(model)) w.Write(utils.ToJSON(model))
} }
// 獲取模型預覽圖
func ModelsItemPreview(w http.ResponseWriter, r *http.Request) {
var model = models.Model{ID: utils.ParamInt(mux.Vars(r)["id"], 0)}
var filepath = fmt.Sprintf("data/models/%d/preview/%s", model.ID, mux.Vars(r)["filename"])
fmt.Println(filepath)
// 檢查文件是否存在
if _, err := os.Stat(filepath); err != nil {
w.WriteHeader(http.StatusNotFound)
w.Write([]byte(err.Error()))
return
}
// 返回文件
http.ServeFile(w, r, filepath)
}
// 更新模型 // 更新模型
func ModelItemPatch(w http.ResponseWriter, r *http.Request) { func ModelItemPatch(w http.ResponseWriter, r *http.Request) {
var model = models.Model{ID: utils.ParamInt(mux.Vars(r)["id"], 0)} var model = models.Model{ID: utils.ParamInt(mux.Vars(r)["id"], 0)}
@@ -242,8 +260,13 @@ func ModelItemPatch(w http.ResponseWriter, r *http.Request) {
return return
} }
log.Println("更新模型:", model.Name)
log.Println("Content-Type:", r.Header.Get("Content-Type"))
// 判断数据类型是否二进制文件 // 判断数据类型是否二进制文件
if r.Header.Get("Content-Type") == "multipart/form-data" { if regexp.MustCompile(`multipart/form-data`).MatchString(r.Header.Get("Content-Type")) {
log.Println("更新模型:", model.Name)
// 解析表单取出图片文件 (32MB) // 解析表单取出图片文件 (32MB)
if err := r.ParseMultipartForm(32 << 20); err != nil { if err := r.ParseMultipartForm(32 << 20); err != nil {
log.Println(err) log.Println(err)
@@ -251,35 +274,34 @@ func ModelItemPatch(w http.ResponseWriter, r *http.Request) {
} }
// 检查文件目录是否存在 // 检查文件目录是否存在
os.MkdirAll(fmt.Sprintf("data/models/%d", model.ID), 0777) os.MkdirAll(fmt.Sprintf("data/models/%d/preview", model.ID), 0777)
// 上传文件 // 上传文件
for _, headers := range r.MultipartForm.File { for x, headers := range r.MultipartForm.File {
for _, header := range headers { log.Println("x:", x)
for m, header := range headers {
log.Println("m:", m)
// 打开本地文件 // 打开本地文件
file, err := os.Create(fmt.Sprintf("data/models/%d/%s", model.ID, header.Filename)) file, err := os.Create(fmt.Sprintf("data/models/%d/preview/%s", model.ID, header.Filename))
if err != nil { if err != nil {
log.Println(err) log.Println(err)
return return
} }
defer file.Close() defer file.Close()
// 打开上传文件 // 打开上传文件
f, err := header.Open() f, err := header.Open()
if err != nil { if err != nil {
log.Println(err) log.Println(err)
return return
} }
// 拷贝文件到本地 // 拷贝文件到本地
_, err = io.Copy(file, f) _, err = io.Copy(file, f)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
return return
} }
// 更新模型 // 更新模型
model.Preview = fmt.Sprintf("data/models/%d/%s", model.ID, header.Filename) model.Preview = fmt.Sprintf("data/models/%d/preview/%s", model.ID, header.Filename)
if err := configs.ORMDB().Save(&model).Error; err != nil { if err := configs.ORMDB().Save(&model).Error; err != nil {
log.Println(err) log.Println(err)
return return