houyaf vor 3 Jahren
Ursprung
Commit
c5035aade4

+ 1 - 1
gateway/http_handler.go

@@ -221,7 +221,7 @@ func (a *httpHandler) HandleOAMRuleList(objectCode, oamCode string, m map[string
     return nil
 }
 
-func (a *httpHandler) HandleOAMRule(oamRule *viewmodels.BizObjectOAMRuleInfo, m map[string]interface{}, user *viewmodels.CurUserInfo)(error) {
+func (a *httpHandler) HandleOAMRule(oamRule *viewmodels.BizObjectOAMRuleInfo, m map[string]interface{}, user *viewmodels.CurUserInfo) error {
     if oamRule.RuleId == constant.BIZ_RULE_NEW_ID {
         m[oamRule.TargetAttrCode] = service.NewID()
     } else if oamRule.RuleId == constant.BIZ_RULE_CUR_DATETIME {

+ 0 - 1
mapping/attr_mapping.go

@@ -1 +0,0 @@
-package mapping

+ 0 - 1
mapping/object_mapping.go

@@ -1 +0,0 @@
-package mapping

+ 186 - 0
utils/local_upload.go

@@ -0,0 +1,186 @@
+package utils
+
+import (
+    "encoding/base64"
+    "errors"
+    uuid "github.com/iris-contrib/go.uuid"
+    "github.com/kataras/iris/v12"
+    "io"
+    "mime/multipart"
+    "os"
+    "path/filepath"
+    "strings"
+    "time"
+)
+
+// client version and secret, it should be from client side
+const (
+    UploadDir    string = "./public/upload/"
+    UrlBase      string = "/upload/"
+)
+
+// DstFile 文件
+type DstFile struct {
+    Name string `json:"name"`
+    Src  string `json:"src"`
+}
+
+
+func UploadFile(ctx iris.Context) (*DstFile,error){
+    file ,info ,err := ctx.FormFile("uploadfile")
+    if err != nil {
+        return nil ,err
+    }
+    defer file.Close()
+    
+    oldFileName := info.Filename
+    destFile, url := GenerateNewFileName(oldFileName)
+    
+    out, err := os.OpenFile(destFile, os.O_WRONLY|os.O_CREATE, 0666)
+    if err != nil{
+        return nil, err
+    }
+    
+    defer out.Close()
+    _ ,err = io.Copy(out,file)
+    if err != nil {
+        return nil, err
+    }
+    
+    outfile := &DstFile{Name: oldFileName ,Src:url }
+    
+    return outfile, nil
+}
+
+func UploadFileBase64(ctx iris.Context) (*DstFile,error){
+    base64StrRaw := ctx.FormValue("base64")
+    if base64StrRaw == "" && len(base64StrRaw) <= 8 {
+        return nil, errors.New("文件错误")
+    }
+    
+    index := strings.Index(base64StrRaw, ";")
+    base64Str := base64StrRaw[index+8:]
+    
+    destByte, err := base64.StdEncoding.DecodeString(base64Str)
+    if err != nil {
+        return nil, err
+    }
+    
+    suffix := base64StrRaw[11:index]
+    
+    oldFileName := "old."+suffix
+    destFile, url := GenerateNewFileName(oldFileName)
+    
+    out, err := os.OpenFile(destFile, os.O_WRONLY|os.O_CREATE, 0666)
+    if err != nil{
+        return nil, err
+    }
+    
+    defer out.Close()
+    _ ,err = out.Write(destByte)
+    if err != nil {
+        return nil, err
+    }
+    
+    outfile := &DstFile{Name: oldFileName ,Src:url }
+    
+    return outfile, nil
+}
+
+// UploadMultiFiles Upload Multi Files
+func UploadMultiFiles(ctx iris.Context)(int, []DstFile, error){
+    outFiles := []DstFile{}
+    
+    maxSize := ctx.Application().ConfigurationReadOnly().GetPostMaxMemory()
+    
+    err := ctx.Request().ParseMultipartForm(maxSize)
+    if err != nil {
+        return 0 , outFiles, err
+    }
+    
+    form     := ctx.Request().MultipartForm
+    files    := form.File["files[]"]
+    count    := len(files)
+    
+    failures := 0
+    dstIndex := 1
+    
+    for _, file := range files {
+        url, err := SaveUploadFile(file)
+        if err != nil {
+            failures++
+        }else{
+            out := DstFile{Name: file.Filename ,Src:url}
+            outFiles = append(outFiles, out)
+            dstIndex++
+        }
+    }
+    
+    num := count - failures
+    
+    return  num ,outFiles ,nil
+}
+
+func SaveUploadFile(fh *multipart.FileHeader)(string, error){
+    src ,err := fh.Open()
+    if err != nil {
+        return "" ,err
+    }
+    defer src.Close()
+    
+    oldFileName := fh.Filename
+    srcFile, urlFile := GenerateNewFileName(oldFileName)
+    
+    out, err := os.OpenFile(srcFile ,os.O_WRONLY|os.O_CREATE ,os.FileMode(0666))
+    if err != nil {
+        return "" ,err
+    }
+    
+    defer out.Close()
+    
+    _, err = io.Copy(out, src)
+    
+    return urlFile, err
+}
+
+// BeforeSave Before Save
+func BeforeSave(ctx iris.Context ,file *multipart.FileHeader){
+    ip := ctx.RemoteAddr()
+    ip = strings.Replace(ip ,"." ,"-" ,-1)
+    ip = strings.Replace(ip ,":" ,"-" ,-1)
+    
+    file.Filename = ip + "-" + file.Filename
+}
+
+// CreateDateDir Create date directory
+func CreateDateDir() (srcPath, urlPath string) {
+    folderName := time.Now().Format("20060102")
+    src  := filepath.Join(UploadDir, folderName)
+    url  := filepath.Join(UrlBase, folderName)
+    _, err := os.Stat(srcPath)
+    if os.IsNotExist(err ){
+        _ = os.Mkdir(src, os.ModePerm)
+        _ = os.Chmod(src, os.ModePerm)
+    }
+    
+    return src ,url
+}
+
+// GenerateNewFileName Generate new file name
+func GenerateNewFileName(oldFileName string) (srcPath, urlPath string) {
+    u1, _ := uuid.NewV4()
+    newFileName := u1.String()
+    src , url := CreateDateDir()
+    
+    dotIndex := strings.LastIndex(oldFileName, ".")
+    if dotIndex != -1 && dotIndex != 0 {
+        newFileName += oldFileName[dotIndex:]
+    }
+    
+    src = filepath.Join(src, newFileName)
+    url = filepath.Join(url, newFileName)
+    
+    return src, url
+}
+
+

+ 6 - 6
web/controllers/biz_rule_controller.go

@@ -12,12 +12,12 @@ type BizRuleController struct {
 }
 
 func (c *BizRuleController) BeforeActivation(b mvc.BeforeActivation) {
-    b.Handle("GET",         "/",                "GetList"   )
-    b.Handle("GET",         "/page",            "GetPage"   )
-    b.Handle("GET",         "/{ruleId:int64}",  "GetById"   )
-    b.Handle("POST",        "/add",             "Create"    )
-    b.Handle("PUT",         "/update",          "Update"    )
-    b.Handle("DELETE",      "/{ruleId:int64}",  "DeleteByID")
+    b.Handle("GET",         "/",                        "GetList"   )
+    b.Handle("GET",         "/page",                    "GetPage"   )
+    b.Handle("GET",         "/{ruleId:int64}",          "GetById"   )
+    b.Handle("POST",        "/add",                     "Create"    )
+    b.Handle("PUT",         "/update",                  "Update"    )
+    b.Handle("DELETE",      "/{ruleId:int64}",          "DeleteByID")
 }
 
 func (c *BizRuleController) GetList() *JsonResult {

+ 1 - 1
web/controllers/company_profile_controller.go

@@ -12,7 +12,7 @@ type CompanyProfileController struct {
 }
 
 func (c *CompanyProfileController) BeforeActivation(b mvc.BeforeActivation) {
-    b.Handle("GET"      ,"/"                            ,"GetById"   )
+    b.Handle("GET"      ,"/"                            ,"GetById")
     b.Handle("PUT"      ,"/update"                      ,"Update" )
 }
 

+ 6 - 6
web/controllers/task_cat_controller.go

@@ -12,12 +12,12 @@ type TaskCatController struct {
 }
 
 func (c *TaskCatController) BeforeActivation(b mvc.BeforeActivation) {
-	b.Handle("GET",     "",                     "GetList"   )
-	b.Handle("GET",     "/page",                "GetPage"   )
-	b.Handle("GET",     "/{taskCatId:int64}",   "GetById"   )
-	b.Handle("POST",    "/add",                 "Create"    )
-	b.Handle("PUT",     "/update",              "Update"    )
-	b.Handle("DELETE",  "/{taskCatId:int64}",   "DeleteByID")
+	b.Handle("GET",     "",                         "GetList"   )
+	b.Handle("GET",     "/page",                    "GetPage"   )
+	b.Handle("GET",     "/{taskCatId:int64}",       "GetById"   )
+	b.Handle("POST",    "/add",                     "Create"    )
+	b.Handle("PUT",     "/update",                  "Update"    )
+	b.Handle("DELETE",  "/{taskCatId:int64}",       "DeleteByID")
 }
 
 func (c *TaskCatController) GetList() *JsonResult {

+ 21 - 1
web/controllers/upload_controller.go

@@ -3,6 +3,7 @@ package controllers
 import (
 	"github.com/kataras/iris/v12"
 	"github.com/kataras/iris/v12/mvc"
+	"xps/utils"
 )
 
 type DstFile struct {
@@ -18,5 +19,24 @@ type UploadController struct {
 func (c *UploadController) BeforeActivation(b mvc.BeforeActivation) {
 	b.Handle("POST", "/upload1", "Upload")
 	b.Handle("POST", "/upload2", "MultiUpload")
-	b.Handle("POST", "/upload3", "Upload3")
+}
+
+// Upload :Single Upload
+func (c *UploadController) Upload() *JsonResult {
+	file, err := utils.UploadFile(c.Ctx)
+	if err != nil {
+		return ResultErr(err.Error(), nil)
+	} else {
+		return ResultOk("获取成功", file)
+	}
+}
+
+// MultiUpload :Multiple Upload
+func (c *UploadController) MultiUpload() *JsonResult {
+	_, files, err := utils.UploadMultiFiles(c.Ctx)
+	if err != nil {
+		return ResultErr(err.Error(), nil)
+	} else {
+		return ResultOk("获取成功", files)
+	}
 }