From 4cbcf7e512b3744e1748e768ae1839547f414235 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 25 Sep 2024 14:06:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=8A=E4=BC=A0=E5=9B=BE?= =?UTF-8?q?=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/controller/Base.go | 1 + api/controller/Editor.go | 139 +++++++++++++++++++++++++++++++++++++ api/router/router.go | 10 +++ config.yaml | 13 +++- extend/Editor/Editor.go | 128 ++++++++++++++++++++++++++++++++++ go.mod | 1 + go.sum | 4 +- resource/3061726102564.png | Bin 0 -> 72547 bytes utils/image.go | 43 ++++++++++++ utils/replace.go | 10 +++ 10 files changed, 345 insertions(+), 4 deletions(-) create mode 100644 api/controller/Editor.go create mode 100644 extend/Editor/Editor.go create mode 100644 resource/3061726102564.png create mode 100644 utils/image.go diff --git a/api/controller/Base.go b/api/controller/Base.go index 283c480..23266a1 100644 --- a/api/controller/Base.go +++ b/api/controller/Base.go @@ -13,4 +13,5 @@ type Api struct { SystemMember // 会员配置 SystemSingle // 单项配置 BaseAgreement // 基础数据-协议 + Editor // 配置-编辑器 } diff --git a/api/controller/Editor.go b/api/controller/Editor.go new file mode 100644 index 0000000..27240cd --- /dev/null +++ b/api/controller/Editor.go @@ -0,0 +1,139 @@ +package controller + +import ( + "fmt" + "github.com/gin-gonic/gin" + "hepa-calc-admin-api/api/responses" + e "hepa-calc-admin-api/extend/Editor" + "hepa-calc-admin-api/extend/aliyun" + "hepa-calc-admin-api/utils" + "io" + "math/rand" + "mime/multipart" + "net/http" + "time" +) + +type Editor struct{} + +// GetEditorConfig 编辑器-获取配置 +func (b *Editor) GetEditorConfig(c *gin.Context) { + action := c.Query("action") + if action == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 获取配置 config + if action == "config" { + config := e.GetConfig() + c.JSON(http.StatusOK, config) + return + } + + // 图片列表 listImage + if action == "listImage" { + responses.Ok(c) + return + } + + // 文件列表 listFile + if action == "listFile" { + responses.Ok(c) + return + } + + responses.Ok(c) + return +} + +// EditorUpload 编辑器-上传 +func (b *Editor) EditorUpload(c *gin.Context) { + action := c.Query("action") + if action == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + file, err := c.FormFile("file") + if err != nil { + responses.FailWithMessage("文件错误", c) + return + } + + f, err := file.Open() + if err != nil { + responses.FailWithMessage("文件错误", c) + return + } + defer func(f multipart.File) { + err := f.Close() + if err != nil { + fmt.Println(err) + } + }(f) + + // 读取文件内容到字节切片 + fileBytes, err := io.ReadAll(f) + if err != nil { + responses.FailWithMessage("文件错误", c) + return + } + + // 添加图片水印 + fileBytes, err = utils.AddWatermarkToImage(fileBytes, "./resource/3061726102564.png") + if err != nil { + return + } + + fileType := "jpg" + if file.Filename != "" { + fileType = utils.GetExtension(file.Filename) + if fileType == "" { + fileType = "jpg" + } + } + + now := time.Now() + dateTimeString := now.Format("20060102150405") // 当前时间字符串 + rand.New(rand.NewSource(time.Now().UnixNano())) // 设置随机数 + + var ossPath string + + // 上传图片 image + if action == "image" { + ossPath = "static/images/" + fmt.Sprintf("%d", rand.Intn(9000)+1000) + dateTimeString + "." + fileType + } + + // 上传视频 video + if action == "video" { + ossPath = "static/video/" + fmt.Sprintf("%d", rand.Intn(9000)+1000) + dateTimeString + "." + fileType + } + + // 上传文件 file + if action == "file" { + ossPath = "static/file/" + fmt.Sprintf("%d", rand.Intn(9000)+1000) + dateTimeString + "." + fileType + } + + if ossPath == "" { + responses.FailWithMessage("上传失败", c) + return + } + + // 上传oss + _, err = aliyun.PutObjectByte(ossPath, fileBytes) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + var g e.UploadDto + g.Url = utils.AddOssDomain("/" + ossPath) + g.State = "SUCCESS" + g.Title = dateTimeString + "." + fileType + g.Original = dateTimeString + "." + fileType + g.Type = fileType + + c.JSON(http.StatusOK, g) + return +} diff --git a/api/router/router.go b/api/router/router.go index 64b936e..1aa1617 100644 --- a/api/router/router.go +++ b/api/router/router.go @@ -271,6 +271,16 @@ func privateRouter(r *gin.Engine, api controller.Api) { // 新增单项配置 singleGroup.POST("", api.SystemSingle.AddSystemSingle) } + + // 编辑器配置 + editorGroup := systemGroup.Group("/editor") + { + // 编辑器-获取配置 + editorGroup.GET("", api.Editor.GetEditorConfig) + + // 编辑器-上传 + editorGroup.POST("", api.Editor.EditorUpload) + } } // 协议 diff --git a/config.yaml b/config.yaml index e96fb50..5c87477 100644 --- a/config.yaml +++ b/config.yaml @@ -36,9 +36,9 @@ jwt: oss: oss-access-key: LTAI5tKmFrVCghcxX7yHyGhm oss-access-key-secret: q1aiIZCJJuf92YbKk2cSXnPES4zx26 - oss-bucket: dev-knowledge + oss-bucket: dev-hepa oss-endpoint: oss-cn-beijing.aliyuncs.com - oss-custom-domain-name: https://dev-knowledge.oss-cn-beijing.aliyuncs.com + oss-custom-domain-name: https://dev-hepa.oss-cn-beijing.aliyuncs.com # [阿里大鱼短信] dysms: @@ -69,4 +69,11 @@ amqp: port: 5672 user: gdxz_2022rabbitmq password: qwr2p&¥e@3.2p - vhost: gdxz_hepa \ No newline at end of file + vhost: gdxz_hepa + +# [app] +app: + apiUrl: https://dev-wx.igandan.com + secretKey: RY8pcn04#TSdzHVX6YgWnyCue9!T&QP^ + imagePrefix: https://dev-doc.igandan.com/app + platform: suanyisuan \ No newline at end of file diff --git a/extend/Editor/Editor.go b/extend/Editor/Editor.go new file mode 100644 index 0000000..4023a6a --- /dev/null +++ b/extend/Editor/Editor.go @@ -0,0 +1,128 @@ +package Editor + +// Config 定义了上传和管理图片、视频、文件等的配置信息 +type Config struct { + // 图片上传配置 + ImageActionName string `json:"imageActionName"` // 执行上传图片的action名称,默认值:image + ImageFieldName string `json:"imageFieldName"` // 提交的图片表单名称,默认值:file + ImageMaxSize int `json:"imageMaxSize"` // 上传大小限制,单位B,默认值:2048000 + ImageAllowFiles []string `json:"imageAllowFiles"` // 允许的图片格式,默认值:[".png", ".jpg", ".jpeg"] + ImageCompressEnable bool `json:"imageCompressEnable"` // 是否压缩图片,默认值:true + ImageCompressBorder int `json:"imageCompressBorder"` // 图片压缩最长边限制,默认值:1600 + ImageInsertAlign string `json:"imageInsertAlign"` // 插入图片时的浮动方式,默认值:none + ImageUrlPrefix string `json:"imageUrlPrefix"` // 图片访问路径前缀,默认值:空 + + // 涂鸦上传配置 + ScrawlActionName string `json:"scrawlActionName"` // 执行上传涂鸦的action名称,默认值:scrawl + ScrawlFieldName string `json:"scrawlFieldName"` // 提交的涂鸦表单名称,默认值:file + ScrawlMaxSize int `json:"scrawlMaxSize"` // 涂鸦上传大小限制,单位B,默认值:2048000 + ScrawlUrlPrefix string `json:"scrawlUrlPrefix"` // 涂鸦访问路径前缀,默认值:空 + ScrawlInsertAlign string `json:"scrawlInsertAlign"` // 插入涂鸦时的浮动方式,默认值:none + + // 截图上传配置 + SnapscreenActionName string `json:"snapscreenActionName"` // 执行上传截图的action名称,默认值:snap + SnapscreenUrlPrefix string `json:"snapscreenUrlPrefix"` // 截图访问路径前缀,默认值:空 + SnapscreenInsertAlign string `json:"snapscreenInsertAlign"` // 插入截图时的浮动方式,默认值:none + + // 图片抓取配置 + CatcherActionName string `json:"catcherActionName"` // 执行抓取远程图片的action名称,默认值:catch + CatcherFieldName string `json:"catcherFieldName"` // 提交的图片列表表单名称,默认值:source + CatcherLocalDomain []string `json:"catcherLocalDomain"` // 例外的图片抓取域名,默认值:["127.0.0.1", "localhost"] + CatcherUrlPrefix string `json:"catcherUrlPrefix"` // 抓取图片访问路径前缀,默认值:空 + CatcherMaxSize int `json:"catcherMaxSize"` // 抓取图片上传大小限制,单位B,默认值:10485760 + CatcherAllowFiles []string `json:"catcherAllowFiles"` // 允许的抓取图片格式,默认值:[".png", ".jpg", ".jpeg"] + + // 视频上传配置 + VideoActionName string `json:"videoActionName"` // 执行上传视频的action名称,默认值:video + VideoFieldName string `json:"videoFieldName"` // 提交的视频表单名称,默认值:file + VideoUrlPrefix string `json:"videoUrlPrefix"` // 视频访问路径前缀,默认值:空 + VideoMaxSize int `json:"videoMaxSize"` // 上传视频大小限制,单位B,默认值:102400000 + VideoAllowFiles []string `json:"videoAllowFiles"` // 允许的视频格式,默认值:[".mp4"] + + // 文件上传配置 + FileActionName string `json:"fileActionName"` // 执行上传文件的action名称,默认值:file + FileFieldName string `json:"fileFieldName"` // 提交的文件表单名称,默认值:file + FileUrlPrefix string `json:"fileUrlPrefix"` // 文件访问路径前缀,默认值:空 + FileMaxSize int `json:"fileMaxSize"` // 上传文件大小限制,单位B,默认值:104857600 + FileAllowFiles []string `json:"fileAllowFiles"` // 允许的文件格式,默认值:[".zip", ".pdf", ".doc"] + + // 图片列表配置 + ImageManagerActionName string `json:"imageManagerActionName"` // 执行图片管理的action名称,默认值:listImage + ImageManagerListSize int `json:"imageManagerListSize"` // 每次列出文件数量,默认值:20 + ImageManagerUrlPrefix string `json:"imageManagerUrlPrefix"` // 图片管理访问路径前缀,默认值:空 + ImageManagerInsertAlign string `json:"imageManagerInsertAlign"` // 插入的图片浮动方式,默认值:none + ImageManagerAllowFiles []string `json:"imageManagerAllowFiles"` // 列出的图片文件类型,默认值:[".jpg", ".png", ".jpeg"] + + // 文件列表配置 + FileManagerActionName string `json:"fileManagerActionName"` // 执行文件管理的action名称,默认值:listFile + FileManagerUrlPrefix string `json:"fileManagerUrlPrefix"` // 指定要列出文件的目录,默认值:空 + FileManagerListSize int `json:"fileManagerListSize"` // 每次列出文件数量,默认值:20 + FileManagerAllowFiles []string `json:"fileManagerAllowFiles"` // 列出的文件类型,默认值:[".zip", ".pdf", ".doc"] + + // 公式配置 + FormulaConfig FormulaConfig `json:"formulaConfig"` // 公式渲染相关配置 +} + +// FormulaConfig 定义了公式渲染的相关配置 +type FormulaConfig struct { + ImageUrlTemplate string `json:"imageUrlTemplate"` // 公式渲染的图片URL模板 +} + +// UploadDto 上传返回数据 +type UploadDto struct { + Original string `json:"original"` + State string `json:"state"` + Title string `json:"title"` + Type string `json:"type"` + Url string `json:"url"` +} + +// GetConfig 封装方法,返回配置信息 +func GetConfig() Config { + return Config{ + ImageActionName: "image", + ImageFieldName: "file", + ImageMaxSize: 8388608, + ImageAllowFiles: []string{".jpg", ".png", ".jpeg"}, + ImageCompressEnable: false, + ImageCompressBorder: 5000, + ImageInsertAlign: "none", + ImageUrlPrefix: "", + ScrawlActionName: "crawl", + ScrawlFieldName: "file", + ScrawlMaxSize: 10485760, + ScrawlUrlPrefix: "", + ScrawlInsertAlign: "none", + SnapscreenActionName: "snap", + SnapscreenUrlPrefix: "", + SnapscreenInsertAlign: "none", + CatcherActionName: "catch", + CatcherFieldName: "source", + CatcherLocalDomain: []string{"127.0.0.1", "localhost"}, + CatcherUrlPrefix: "", + CatcherMaxSize: 10485760, + CatcherAllowFiles: []string{".jpg", ".png", ".jpeg"}, + VideoActionName: "video", + VideoFieldName: "file", + VideoUrlPrefix: "", + VideoMaxSize: 104857600, + VideoAllowFiles: []string{".mp4"}, + FileActionName: "file", + FileFieldName: "file", + FileUrlPrefix: "", + FileMaxSize: 104857600, + FileAllowFiles: []string{".zip", ".pdf", ".doc"}, + ImageManagerActionName: "listImage", + ImageManagerListSize: 20, + ImageManagerUrlPrefix: "", + ImageManagerInsertAlign: "none", + ImageManagerAllowFiles: []string{".jpg", ".png", ".jpeg"}, + FileManagerActionName: "listFile", + FileManagerUrlPrefix: "", + FileManagerListSize: 20, + FileManagerAllowFiles: []string{".zip", ".pdf", ".doc"}, + FormulaConfig: FormulaConfig{ + ImageUrlTemplate: "https://r.latexeasy.com/image.svg?{}", + }, + } +} diff --git a/go.mod b/go.mod index 464cf7c..624b10e 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( github.com/alibabacloud-go/tea-utils/v2 v2.0.6 github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible github.com/bwmarrin/snowflake v0.3.0 + github.com/disintegration/imaging v1.6.2 github.com/facebookarchive/grace v0.0.0-20180706040059-75cf19382434 github.com/fsnotify/fsnotify v1.7.0 github.com/gen2brain/go-fitz v1.23.7 diff --git a/go.sum b/go.sum index c6f7573..2d3d2a2 100644 --- a/go.sum +++ b/go.sum @@ -57,6 +57,8 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c= +github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4= github.com/facebookarchive/grace v0.0.0-20180706040059-75cf19382434 h1:AFIATPhFj7mrISc4z9zEpfm4a8UfwsCWzJ+Je5jA5Rs= github.com/facebookarchive/grace v0.0.0-20180706040059-75cf19382434/go.mod h1:PY9iiFMrFjTzegsqfKCcb+Ekk5/j0ch0sMdBwlT6atI= github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a h1:yDWHCSQ40h88yih2JAcL6Ls/kVkSE8GFACTGVnMPruw= @@ -235,6 +237,7 @@ golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= +golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.13.0/go.mod h1:6mmbMOeV28HuMTgA6OSRkdXKYw/t5W9Uwn2Yv1r3Yxk= golang.org/x/image v0.14.0 h1:tNgSxAFe3jC4uYqvZdTr84SZoM1KfwdC9SKIFrLjFn4= golang.org/x/image v0.14.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE= @@ -325,7 +328,6 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gorm.io/driver/mysql v1.5.7 h1:MndhOPYOfEp2rHKgkZIhJ16eVUIRf2HmzgoPmh7FCWo= gorm.io/driver/mysql v1.5.7/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM= gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= -gorm.io/gorm v1.25.10/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= gorm.io/gorm v1.25.11 h1:/Wfyg1B/je1hnDx3sMkX+gAlxrlZpn6X0BXRlwXlvHg= gorm.io/gorm v1.25.11/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= diff --git a/resource/3061726102564.png b/resource/3061726102564.png new file mode 100644 index 0000000000000000000000000000000000000000..86fbbe7abce6e104c14671ad36008a2a663db500 GIT binary patch literal 72547 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

>!7TwxhZ(ABcxASLaC)P~Oh6G800@c*6OKG)e( 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 N002ovPDHLkV1k$y{w)9i literal 0 HcmV?d00001 diff --git a/utils/image.go b/utils/image.go new file mode 100644 index 0000000..a033161 --- /dev/null +++ b/utils/image.go @@ -0,0 +1,43 @@ +package utils + +import ( + "bytes" + "fmt" + "github.com/disintegration/imaging" + "image" +) + +// AddWatermarkToImage 添加图片水印 +func AddWatermarkToImage(fileBytes []byte, watermarkPath string) ([]byte, error) { + // 将字节切片转为io.Reader + reader := bytes.NewReader(fileBytes) + + // 从字节流中解码图片 + srcImage, err := imaging.Decode(reader) + if err != nil { + return nil, fmt.Errorf("图片解码失败: %w", err) + } + + // 打开水印图片 + watermarkImage, err := imaging.Open(watermarkPath) + if err != nil { + return nil, fmt.Errorf("水印图片加载失败: %w", err) + } + + // 获取原图片的宽高,用于水印的位置计算 + srcBounds := srcImage.Bounds() + watermarkBounds := watermarkImage.Bounds() + + // 将水印添加到原图片的右下角 + offset := image.Pt(srcBounds.Max.X-watermarkBounds.Max.X, srcBounds.Max.Y-watermarkBounds.Max.Y) + dstImage := imaging.Overlay(srcImage, watermarkImage, offset, 1.0) + + // 将处理后的图片保存到字节切片中 + var outputBuffer bytes.Buffer + err = imaging.Encode(&outputBuffer, dstImage, imaging.PNG) + if err != nil { + return nil, fmt.Errorf("图片编码失败: %w", err) + } + + return outputBuffer.Bytes(), nil +} diff --git a/utils/replace.go b/utils/replace.go index 6334b51..89d92bd 100644 --- a/utils/replace.go +++ b/utils/replace.go @@ -20,3 +20,13 @@ func AddOssDomain(url string) string { } return config.C.Oss.OssCustomDomainName + url } + +// GetExtension 解析并返回字符串中 `.` 后面的部分 +func GetExtension(s string) string { + // 使用 strings.Split 分割字符串 + parts := strings.Split(s, ".") + if len(parts) > 1 { + return parts[len(parts)-1] + } + return "" +}