package controller import ( uuid "github.com/iris-contrib/go.uuid" "github.com/kataras/iris/v12/mvc" "io" "mime/multipart" "os" "path/filepath" "strings" "time" "xps/cmd/constant" "xps/pkg/system/service" "xps/pkg/utils" ) // client version and secret, it should be from client side const ( UploadDir string = "E:/dev-x/xps-server-g5/cmd/main/public/upload/" UrlBase string = "/upload/" ) type FileData struct { FileInfo *multipart.FileHeader FileData *multipart.File } type UploadController struct { Base Service service.UploadService } func (c *UploadController) BeforeActivation(b mvc.BeforeActivation) { b.Handle("POST", "/file", "UploadFile") b.Handle("POST", "/files", "UploadFiles") } // UploadFile :Single Upload func (c *UploadController) UploadFile() *JsonResult { ocId := c.GetCurOcId() userId := c.GetCurUserId() f, fh, err := c.Ctx.FormFile("uploadfile") if err != nil { return ResultErr(err.Error(), nil) } defer f.Close() oldFileName := fh.Filename targetFileName := c.GenerateNewFileName(oldFileName) out, err := os.OpenFile(targetFileName, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666) if err != nil { return ResultErr(err.Error(), nil) } defer out.Close() _, err = io.Copy(out, f) if err != nil { return ResultErr(err.Error(), nil) } targetFile := service.TargetFile{ FileName: oldFileName, FilePath: targetFileName, } file, err := c.Service.UploadFile(ocId, userId, constant.DOC_DIR_TEMP, targetFile) if err != nil { return ResultErr(err.Error(), nil) } else { return ResultOk("获取成功", file) } } // UploadFiles :Multiple Upload func (c *UploadController) UploadFiles() *JsonResult { _, files, err := utils.UploadMultiFiles(c.Ctx) if err != nil { return ResultErr(err.Error(), nil) } else { return ResultOk("获取成功", files) } } // CreateDateDir Create date directory func (c *UploadController) CreateDateDir() (srcPath string) { folderName := time.Now().Format("20060102") // curPath, _ := os.Getwd() src := filepath.Join(UploadDir, folderName) _, err := os.Stat(srcPath) if os.IsNotExist(err) { _ = os.Mkdir(src, os.ModePerm) _ = os.Chmod(src, os.ModePerm) } return src } // GenerateNewFileName Generate new file name func (c *UploadController) GenerateNewFileName(oldFileName string) (srcPath string) { u1, _ := uuid.NewV4() newFileName := u1.String() src := c.CreateDateDir() dotIndex := strings.LastIndex(oldFileName, ".") if dotIndex != -1 && dotIndex != 0 { newFileName += oldFileName[dotIndex:] } src = filepath.Join(src, newFileName) return src }