preview img
This commit is contained in:
@@ -12,6 +12,7 @@ import (
|
||||
"main/utils"
|
||||
"net/http"
|
||||
"os"
|
||||
"regexp"
|
||||
"strconv"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
@@ -233,6 +234,23 @@ func ModelItemGet(w http.ResponseWriter, r *http.Request) {
|
||||
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) {
|
||||
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
|
||||
}
|
||||
|
||||
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)
|
||||
if err := r.ParseMultipartForm(32 << 20); err != nil {
|
||||
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 _, header := range headers {
|
||||
for x, headers := range r.MultipartForm.File {
|
||||
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 {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
// 打开上传文件
|
||||
f, err := header.Open()
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
// 拷贝文件到本地
|
||||
_, err = io.Copy(file, f)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
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 {
|
||||
log.Println(err)
|
||||
return
|
||||
|
Reference in New Issue
Block a user