上传文件
This commit is contained in:
@@ -242,71 +242,129 @@ func ModelItemPatch(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 取出更新数据
|
// 判断数据类型是否二进制文件
|
||||||
var model_new models.Model
|
if r.Header.Get("Content-Type") == "multipart/form-data" {
|
||||||
body, err := ioutil.ReadAll(r.Body)
|
// 解析表单取出图片文件 (32MB)
|
||||||
if err != nil {
|
if err := r.ParseMultipartForm(32 << 20); err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
return
|
return
|
||||||
}
|
|
||||||
defer r.Body.Close()
|
|
||||||
if err = json.Unmarshal(body, &model_new); err != nil {
|
|
||||||
log.Println(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 字段不爲空且不等於原始數據時更新
|
|
||||||
if model_new.Name != "" && model_new.Name != model.Name {
|
|
||||||
model.Name = model_new.Name
|
|
||||||
}
|
|
||||||
if model_new.Info != "" && model_new.Info != model.Info {
|
|
||||||
model.Info = model_new.Info
|
|
||||||
}
|
|
||||||
if model_new.Type != "" && model_new.Type != model.Type {
|
|
||||||
model.Type = model_new.Type
|
|
||||||
}
|
|
||||||
if model_new.Status != "" && model_new.Status != model.Status {
|
|
||||||
model.Status = model_new.Status
|
|
||||||
// 如果狀態被改變爲 ready, 將模型發送到訓練隊列
|
|
||||||
if model.Status == "ready" {
|
|
||||||
model.Status = "training"
|
|
||||||
//go model.Train()
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if model_new.Preview != "" && model_new.Preview != model.Preview {
|
|
||||||
model.Preview = model_new.Preview
|
|
||||||
}
|
|
||||||
if model_new.TriggerWords != "" && model_new.TriggerWords != model.TriggerWords {
|
|
||||||
model.TriggerWords = model_new.TriggerWords
|
|
||||||
}
|
|
||||||
if model_new.BaseModel != "" && model_new.BaseModel != model.BaseModel {
|
|
||||||
model.BaseModel = model_new.BaseModel
|
|
||||||
}
|
|
||||||
if model_new.ModelPath != "" && model_new.ModelPath != model.ModelPath {
|
|
||||||
model.ModelPath = model_new.ModelPath
|
|
||||||
}
|
|
||||||
if model_new.Hash != "" && model_new.Hash != model.Hash {
|
|
||||||
model.Hash = model_new.Hash
|
|
||||||
}
|
|
||||||
if model_new.Epochs != 0 && model_new.Epochs != model.Epochs {
|
|
||||||
model.Epochs = model_new.Epochs
|
|
||||||
}
|
|
||||||
if model_new.Progress != 0 && model_new.Progress != model.Progress {
|
|
||||||
model.Progress = model_new.Progress
|
|
||||||
}
|
|
||||||
if model_new.Tags != nil && len(model_new.Tags) != len(model.Tags) {
|
|
||||||
model.Tags = model_new.Tags
|
|
||||||
}
|
|
||||||
|
|
||||||
// 執行更新
|
// 检查文件目录是否存在
|
||||||
if err := configs.ORMDB().Save(&model).Error; err != nil {
|
os.MkdirAll(fmt.Sprintf("data/models/%d", model.ID), 0777)
|
||||||
log.Println(err)
|
|
||||||
|
// 上传文件
|
||||||
|
for _, headers := range r.MultipartForm.File {
|
||||||
|
for _, header := range headers {
|
||||||
|
// 打开本地文件
|
||||||
|
file, err := os.Create(fmt.Sprintf("data/models/%d/%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)
|
||||||
|
if err := configs.ORMDB().Save(&model).Error; err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 返回更新后的数据
|
||||||
|
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||||||
|
w.Write(utils.ToJSON(model))
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断数据类型是否JSON
|
||||||
|
if r.Header.Get("Content-Type") == "application/json" {
|
||||||
|
|
||||||
|
// 取出更新数据
|
||||||
|
var model_new models.Model
|
||||||
|
body, err := ioutil.ReadAll(r.Body)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer r.Body.Close()
|
||||||
|
if err = json.Unmarshal(body, &model_new); err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 字段不爲空且不等於原始數據時更新
|
||||||
|
if model_new.Name != "" && model_new.Name != model.Name {
|
||||||
|
model.Name = model_new.Name
|
||||||
|
}
|
||||||
|
if model_new.Info != "" && model_new.Info != model.Info {
|
||||||
|
model.Info = model_new.Info
|
||||||
|
}
|
||||||
|
if model_new.Type != "" && model_new.Type != model.Type {
|
||||||
|
model.Type = model_new.Type
|
||||||
|
}
|
||||||
|
if model_new.Status != "" && model_new.Status != model.Status {
|
||||||
|
model.Status = model_new.Status
|
||||||
|
// 如果狀態被改變爲 ready, 將模型發送到訓練隊列
|
||||||
|
if model.Status == "ready" {
|
||||||
|
model.Status = "training"
|
||||||
|
//go model.Train()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if model_new.Preview != "" && model_new.Preview != model.Preview {
|
||||||
|
model.Preview = model_new.Preview
|
||||||
|
}
|
||||||
|
if model_new.TriggerWords != "" && model_new.TriggerWords != model.TriggerWords {
|
||||||
|
model.TriggerWords = model_new.TriggerWords
|
||||||
|
}
|
||||||
|
if model_new.BaseModel != "" && model_new.BaseModel != model.BaseModel {
|
||||||
|
model.BaseModel = model_new.BaseModel
|
||||||
|
}
|
||||||
|
if model_new.ModelPath != "" && model_new.ModelPath != model.ModelPath {
|
||||||
|
model.ModelPath = model_new.ModelPath
|
||||||
|
}
|
||||||
|
if model_new.Hash != "" && model_new.Hash != model.Hash {
|
||||||
|
model.Hash = model_new.Hash
|
||||||
|
}
|
||||||
|
if model_new.Epochs != 0 && model_new.Epochs != model.Epochs {
|
||||||
|
model.Epochs = model_new.Epochs
|
||||||
|
}
|
||||||
|
if model_new.Progress != 0 && model_new.Progress != model.Progress {
|
||||||
|
model.Progress = model_new.Progress
|
||||||
|
}
|
||||||
|
if model_new.Tags != nil && len(model_new.Tags) != len(model.Tags) {
|
||||||
|
model.Tags = model_new.Tags
|
||||||
|
}
|
||||||
|
|
||||||
|
// 執行更新
|
||||||
|
if err := configs.ORMDB().Save(&model).Error; err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 返回更新後的數據
|
||||||
|
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||||||
|
w.Write(utils.ToJSON(model))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 返回更新後的數據
|
|
||||||
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
|
||||||
w.Write(utils.ToJSON(model))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 刪除模型
|
// 刪除模型
|
||||||
|
Reference in New Issue
Block a user