preview img
This commit is contained in:
1
main.go
1
main.go
@@ -59,6 +59,7 @@ func main() {
|
|||||||
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") // 创建一条图片
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user