From 39fdfae541cf6cf46d6f317a110aba06c2281030 Mon Sep 17 00:00:00 2001 From: RockYang Date: Mon, 15 Jan 2024 18:48:01 +0800 Subject: [PATCH] feat: attachments manage function is ready --- api/core/app_server.go | 1 - api/handler/upload_handler.go | 39 ++++++ api/main.go | 1 + api/service/oss/aliyun_oss.go | 1 + api/service/oss/localstorage.go | 1 + api/service/oss/minio_oss.go | 1 + api/service/oss/qiniu_oss.go | 1 + api/service/oss/uploader.go | 7 +- api/store/model/file.go | 1 + api/store/vo/{File.go => file.go} | 1 + database/update-v3.2.5.sql | 3 +- web/public/images/ext/doc.png | Bin 0 -> 4901 bytes web/public/images/ext/file.png | Bin 0 -> 2002 bytes web/public/images/ext/md.png | Bin 0 -> 3355 bytes web/public/images/ext/pdf.png | Bin 0 -> 2865 bytes web/public/images/ext/ppt.png | Bin 0 -> 3442 bytes web/public/images/ext/sql.png | Bin 0 -> 4100 bytes web/public/images/ext/txt.png | Bin 0 -> 3314 bytes web/public/images/ext/xls.png | Bin 0 -> 3220 bytes web/src/assets/css/chat-plus.css | 5 + web/src/assets/css/chat-plus.styl | 6 + web/src/assets/iconfont/iconfont.css | 38 +++++- web/src/assets/iconfont/iconfont.js | 2 +- web/src/assets/iconfont/iconfont.json | 56 ++++++++ web/src/assets/iconfont/iconfont.ttf | Bin 15212 -> 17436 bytes web/src/assets/iconfont/iconfont.woff | Bin 10436 -> 11944 bytes web/src/assets/iconfont/iconfont.woff2 | Bin 9188 -> 10464 bytes web/src/components/FileSelect.vue | 171 +++++++++++++++++++++++++ web/src/components/UserProfile.vue | 1 + web/src/views/ChatPlus.vue | 9 ++ 30 files changed, 336 insertions(+), 9 deletions(-) rename api/store/vo/{File.go => file.go} (87%) create mode 100644 web/public/images/ext/doc.png create mode 100644 web/public/images/ext/file.png create mode 100644 web/public/images/ext/md.png create mode 100644 web/public/images/ext/pdf.png create mode 100644 web/public/images/ext/ppt.png create mode 100644 web/public/images/ext/sql.png create mode 100644 web/public/images/ext/txt.png create mode 100644 web/public/images/ext/xls.png create mode 100644 web/src/components/FileSelect.vue diff --git a/api/core/app_server.go b/api/core/app_server.go index d7bf5590..84c38cb4 100644 --- a/api/core/app_server.go +++ b/api/core/app_server.go @@ -155,7 +155,6 @@ func authorizeMiddleware(s *AppServer, client *redis.Client) gin.HandlerFunc { c.Request.URL.Path == "/api/mj/notify" || c.Request.URL.Path == "/api/invite/hits" || c.Request.URL.Path == "/api/sd/jobs" || - c.Request.URL.Path == "/api/upload" || strings.HasPrefix(c.Request.URL.Path, "/api/test") || strings.HasPrefix(c.Request.URL.Path, "/api/function/") || strings.HasPrefix(c.Request.URL.Path, "/api/sms/") || diff --git a/api/handler/upload_handler.go b/api/handler/upload_handler.go index 62f508a3..6a3da8a4 100644 --- a/api/handler/upload_handler.go +++ b/api/handler/upload_handler.go @@ -3,9 +3,13 @@ package handler import ( "chatplus/core" "chatplus/service/oss" + "chatplus/store/model" + "chatplus/store/vo" + "chatplus/utils" "chatplus/utils/resp" "github.com/gin-gonic/gin" "gorm.io/gorm" + "time" ) type UploadHandler struct { @@ -27,5 +31,40 @@ func (h *UploadHandler) Upload(c *gin.Context) { return } + userId := h.GetLoginUserId(c) + res := h.db.Create(&model.File{ + UserId: userId, + Name: file.Name, + URL: file.URL, + Ext: file.Ext, + Size: file.Size, + CreatedAt: time.Time{}, + }) + if res.Error != nil || res.RowsAffected == 0 { + resp.ERROR(c, "error with update database: "+res.Error.Error()) + return + } + resp.SUCCESS(c, file) } + +func (h *UploadHandler) List(c *gin.Context) { + userId := h.GetLoginUserId(c) + var items []model.File + var files = make([]vo.File, 0) + h.db.Debug().Where("user_id = ?", userId).Find(&items) + if len(items) > 0 { + for _, v := range items { + var file vo.File + err := utils.CopyObject(v, &file) + if err != nil { + logger.Error(err) + continue + } + file.CreatedAt = v.CreatedAt.Unix() + files = append(files, file) + } + } + + resp.SUCCESS(c, files) +} diff --git a/api/main.go b/api/main.go index e4984dbc..514d3e19 100644 --- a/api/main.go +++ b/api/main.go @@ -214,6 +214,7 @@ func main() { }), fx.Invoke(func(s *core.AppServer, h *handler.UploadHandler) { s.Engine.POST("/api/upload", h.Upload) + s.Engine.GET("/api/upload/list", h.List) }), fx.Invoke(func(s *core.AppServer, h *handler.SmsHandler) { group := s.Engine.Group("/api/sms/") diff --git a/api/service/oss/aliyun_oss.go b/api/service/oss/aliyun_oss.go index 35ea314d..c9f4ea21 100644 --- a/api/service/oss/aliyun_oss.go +++ b/api/service/oss/aliyun_oss.go @@ -66,6 +66,7 @@ func (s AliYunOss) PutFile(ctx *gin.Context, name string) (File, error) { } return File{ + Name: file.Filename, URL: fmt.Sprintf("%s/%s", s.config.Domain, objectKey), Ext: fileExt, Size: file.Size, diff --git a/api/service/oss/localstorage.go b/api/service/oss/localstorage.go index 7536dab3..0ce5be2d 100644 --- a/api/service/oss/localstorage.go +++ b/api/service/oss/localstorage.go @@ -41,6 +41,7 @@ func (s LocalStorage) PutFile(ctx *gin.Context, name string) (File, error) { ext := filepath.Ext(file.Filename) return File{ + Name: file.Filename, URL: utils.GenUploadUrl(s.config.BasePath, s.config.BaseURL, path), Ext: ext, Size: file.Size, diff --git a/api/service/oss/minio_oss.go b/api/service/oss/minio_oss.go index d9e16e47..94b03a24 100644 --- a/api/service/oss/minio_oss.go +++ b/api/service/oss/minio_oss.go @@ -87,6 +87,7 @@ func (s MiniOss) PutFile(ctx *gin.Context, name string) (File, error) { } return File{ + Name: file.Filename, URL: fmt.Sprintf("%s/%s/%s", s.config.Domain, s.config.Bucket, info.Key), Ext: fileExt, Size: file.Size, diff --git a/api/service/oss/qiniu_oss.go b/api/service/oss/qiniu_oss.go index cf7789d1..3b989308 100644 --- a/api/service/oss/qiniu_oss.go +++ b/api/service/oss/qiniu_oss.go @@ -74,6 +74,7 @@ func (s QinNiuOss) PutFile(ctx *gin.Context, name string) (File, error) { } return File{ + Name: file.Filename, URL: fmt.Sprintf("%s/%s", s.config.Domain, ret.Key), Ext: fileExt, Size: file.Size, diff --git a/api/service/oss/uploader.go b/api/service/oss/uploader.go index 0861e09a..a8f7b50c 100644 --- a/api/service/oss/uploader.go +++ b/api/service/oss/uploader.go @@ -3,9 +3,10 @@ package oss import "github.com/gin-gonic/gin" type File struct { - Size int64 - URL string - Ext string + Name string `json:"name"` + Size int64 `json:"size"` + URL string `json:"url"` + Ext string `json:"ext"` } type Uploader interface { PutFile(ctx *gin.Context, name string) (File, error) diff --git a/api/store/model/file.go b/api/store/model/file.go index 24ed0d06..dafd650e 100644 --- a/api/store/model/file.go +++ b/api/store/model/file.go @@ -5,6 +5,7 @@ import "time" type File struct { Id uint `gorm:"primarykey;column:id"` UserId uint + Name string URL string Ext string Size int64 diff --git a/api/store/vo/File.go b/api/store/vo/file.go similarity index 87% rename from api/store/vo/File.go rename to api/store/vo/file.go index 1127bd6b..2a0ebc6b 100644 --- a/api/store/vo/File.go +++ b/api/store/vo/file.go @@ -3,6 +3,7 @@ package vo type File struct { Id uint UserId uint `json:"user_id"` + Name string `json:"name"` URL string `json:"url"` Ext string `json:"ext"` Size int64 `json:"size"` diff --git a/database/update-v3.2.5.sql b/database/update-v3.2.5.sql index 5c80c025..7815dded 100644 --- a/database/update-v3.2.5.sql +++ b/database/update-v3.2.5.sql @@ -9,4 +9,5 @@ CREATE TABLE `chatgpt_plus`.`chatgpt_files` ( `created_at` DATETIME NOT NULL COMMENT '创建时间' , PRIMARY KEY (`id`)) ENGINE = InnoDB COMMENT = '用户文件表'; -ALTER TABLE `chatgpt_files` ADD `size` BIGINT(20) NOT NULL DEFAULT '0' COMMENT '文件大小' AFTER `ext`; \ No newline at end of file +ALTER TABLE `chatgpt_files` ADD `size` BIGINT(20) NOT NULL DEFAULT '0' COMMENT '文件大小' AFTER `ext`; +ALTER TABLE `chatgpt_files` ADD `name` VARCHAR(100) NOT NULL COMMENT '文件名' AFTER `user_id`; \ No newline at end of file diff --git a/web/public/images/ext/doc.png b/web/public/images/ext/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..9e2c3696e7311068326e3851f8694644f8388fb6 GIT binary patch literal 4901 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 literal 0 HcmV?d00001 diff --git a/web/public/images/ext/sql.png b/web/public/images/ext/sql.png new file mode 100644 index 0000000000000000000000000000000000000000..c2255c8cfea8b7805c63c946517f36fb5c44a15f GIT binary patch literal 4100 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 literal 0 HcmV?d00001 diff --git a/web/src/assets/css/chat-plus.css b/web/src/assets/css/chat-plus.css index 5e07cdd9..f7d03f65 100644 --- a/web/src/assets/css/chat-plus.css +++ b/web/src/assets/css/chat-plus.css @@ -213,6 +213,11 @@ width: 0; height: 0; } +#app .common-layout .el-main .right-box #container .input-box .input-container .select-file { + position: absolute; + right: 48px; + top: 20px; +} #app .common-layout .el-main .right-box #container .input-box .input-container .send-btn { position: absolute; right: 12px; diff --git a/web/src/assets/css/chat-plus.styl b/web/src/assets/css/chat-plus.styl index fe6c2b84..3a628f31 100644 --- a/web/src/assets/css/chat-plus.styl +++ b/web/src/assets/css/chat-plus.styl @@ -279,6 +279,12 @@ $borderColor = #4676d0; } } + .select-file { + position absolute; + right 48px; + top 20px; + } + .send-btn { position absolute; right 12px; diff --git a/web/src/assets/iconfont/iconfont.css b/web/src/assets/iconfont/iconfont.css index a16a9c4e..3dece43a 100644 --- a/web/src/assets/iconfont/iconfont.css +++ b/web/src/assets/iconfont/iconfont.css @@ -1,8 +1,8 @@ @font-face { font-family: "iconfont"; /* Project id 4125778 */ - src: url('iconfont.woff2?t=1703124384910') format('woff2'), - url('iconfont.woff?t=1703124384910') format('woff'), - url('iconfont.ttf?t=1703124384910') format('truetype'); + src: url('iconfont.woff2?t=1705313263366') format('woff2'), + url('iconfont.woff?t=1705313263366') format('woff'), + url('iconfont.ttf?t=1705313263366') format('truetype'); } .iconfont { @@ -13,6 +13,38 @@ -moz-osx-font-smoothing: grayscale; } +.icon-xls:before { + content: "\e678"; +} + +.icon-file:before { + content: "\e62f"; +} + +.icon-doc:before { + content: "\e6c2"; +} + +.icon-pdf:before { + content: "\e6c3"; +} + +.icon-ppt:before { + content: "\e642"; +} + +.icon-txt:before { + content: "\e644"; +} + +.icon-sql:before { + content: "\e65b"; +} + +.icon-md:before { + content: "\e63a"; +} + .icon-loading:before { content: "\e627"; } diff --git a/web/src/assets/iconfont/iconfont.js b/web/src/assets/iconfont/iconfont.js index 6521c8f0..36dd6b72 100644 --- a/web/src/assets/iconfont/iconfont.js +++ b/web/src/assets/iconfont/iconfont.js @@ -1 +1 @@ -window._iconfont_svg_string_4125778='',function(a){var l=(l=document.getElementsByTagName("script"))[l.length-1],c=l.getAttribute("data-injectcss"),l=l.getAttribute("data-disable-injectsvg");if(!l){var t,o,i,h,e,s=function(l,c){c.parentNode.insertBefore(l,c)};if(c&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}t=function(){var l,c=document.createElement("div");c.innerHTML=a._iconfont_svg_string_4125778,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(l=document.body).firstChild?s(c,l.firstChild):l.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(t,0):(o=function(){document.removeEventListener("DOMContentLoaded",o,!1),t()},document.addEventListener("DOMContentLoaded",o,!1)):document.attachEvent&&(i=t,h=a.document,e=!1,z(),h.onreadystatechange=function(){"complete"==h.readyState&&(h.onreadystatechange=null,m())})}function m(){e||(e=!0,i())}function z(){try{h.documentElement.doScroll("left")}catch(l){return void setTimeout(z,50)}m()}}(window); \ No newline at end of file +window._iconfont_svg_string_4125778='',function(a){var l=(l=document.getElementsByTagName("script"))[l.length-1],c=l.getAttribute("data-injectcss"),l=l.getAttribute("data-disable-injectsvg");if(!l){var t,h,i,o,z,v=function(l,c){c.parentNode.insertBefore(l,c)};if(c&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}t=function(){var l,c=document.createElement("div");c.innerHTML=a._iconfont_svg_string_4125778,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(l=document.body).firstChild?v(c,l.firstChild):l.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(t,0):(h=function(){document.removeEventListener("DOMContentLoaded",h,!1),t()},document.addEventListener("DOMContentLoaded",h,!1)):document.attachEvent&&(i=t,o=a.document,z=!1,e(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,m())})}function m(){z||(z=!0,i())}function e(){try{o.documentElement.doScroll("left")}catch(l){return void setTimeout(e,50)}m()}}(window); \ No newline at end of file diff --git a/web/src/assets/iconfont/iconfont.json b/web/src/assets/iconfont/iconfont.json index ea413f94..50942272 100644 --- a/web/src/assets/iconfont/iconfont.json +++ b/web/src/assets/iconfont/iconfont.json @@ -5,6 +5,62 @@ "css_prefix_text": "icon-", "description": "", "glyphs": [ + { + "icon_id": "12600976", + "name": "xls", + "font_class": "xls", + "unicode": "e678", + "unicode_decimal": 59000 + }, + { + "icon_id": "3750429", + "name": "file", + "font_class": "file", + "unicode": "e62f", + "unicode_decimal": 58927 + }, + { + "icon_id": "4318810", + "name": "doc", + "font_class": "doc", + "unicode": "e6c2", + "unicode_decimal": 59074 + }, + { + "icon_id": "4318811", + "name": "pdf", + "font_class": "pdf", + "unicode": "e6c3", + "unicode_decimal": 59075 + }, + { + "icon_id": "4628503", + "name": "ppt", + "font_class": "ppt", + "unicode": "e642", + "unicode_decimal": 58946 + }, + { + "icon_id": "6233095", + "name": "txt", + "font_class": "txt", + "unicode": "e644", + "unicode_decimal": 58948 + }, + { + "icon_id": "12600910", + "name": "sql", + "font_class": "sql", + "unicode": "e65b", + "unicode_decimal": 58971 + }, + { + "icon_id": "31260974", + "name": "md", + "font_class": "md", + "unicode": "e63a", + "unicode_decimal": 58938 + }, { "icon_id": "1278349", "name": "loading", diff --git a/web/src/assets/iconfont/iconfont.ttf b/web/src/assets/iconfont/iconfont.ttf index 70c1c35072148410061383d3afa8fdd56941aec8..a00e66a768a03d3fd456c9195621613e298bc4fa 100644 GIT binary patch delta 3371 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 Y+2rIDo0^_t4?Zv^j1RxG@)iUC3qiBpn*aa+ delta 1152 zcmZ{iTS$~a6vzLw`|Y}}uDh`M>jLxI=@5iFq)@~IwriO7h8Fp9GqNZ3O?YX5P%JT=4bo0&5+-<^nv039d8p~24Y^Una=O~9J(>ATQfo^~w(NSFrp%=UJLItv??Yj}2vZViXd52_kf$^9&@gZ-g!m+x+N^(;`? z%13(!2hI+8yvJSuRf|0IU}7QvKnWDjl1m4RKD2wQe;~=C0r+&UDfnkx|G7SFeX);m z?Sf5P+4Q{|(JdA1w5>Q0Hwj&Ao*or(@^u7=&*oj=m>_Zk3;Y9|cDMlKc@CT8OEyzX=!wX;= z3XqIV2qG1k*i3z#(FtoUx~Lq{8xCj0r8Q$K284r#4?`%UhAu!Tt%lA(>;}38VMa7` z5aKY;>B-g;`AirUpkV1pbmuLqGV~6ZEPz6Y-fqFp7 z3{(bEVbFCUtUV3Yf>ar(8>9vi{Q)I})EX!zq~1VTAq@r!3>h$Ns5Q(vq3DoN1LcR@ zHb6%^X<$YmQwHV+!dllLJHp9J0}}>$Z_t$)n=mkmh%FhIPQ>0Bm{`O<8kl0lz8RQo z#5)WKa_lj%01!WIU@0Jem9+Dtt74;#sT9?wR&A5ERePWPm6dMYclJAt z-Ec1?#gm&nr#w$RZ&E5!;@&&nRo_M5>(r6dM}D_|I;}WuE&W_ZTi|fuR$w->G4tJA Uk*{j6Dv6$`JFYPIwXR(K0`AWUs{jB1 diff --git a/web/src/assets/iconfont/iconfont.woff b/web/src/assets/iconfont/iconfont.woff index bba70a0d33afbb402f623ecf2574f7f781268297..0eb4791e51722eeb47f83951adc741dfbea26463 100644 GIT binary patch delta 11533 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 delta 10028 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 z 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 literal 9188 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 diff --git a/web/src/components/FileSelect.vue b/web/src/components/FileSelect.vue new file mode 100644 index 00000000..e25c7de5 --- /dev/null +++ b/web/src/components/FileSelect.vue @@ -0,0 +1,171 @@ + + + + + \ No newline at end of file diff --git a/web/src/components/UserProfile.vue b/web/src/components/UserProfile.vue index 105fd0b6..1d16ae84 100644 --- a/web/src/components/UserProfile.vue +++ b/web/src/components/UserProfile.vue @@ -7,6 +7,7 @@ :auto-upload="true" :show-file-list="false" :http-request="afterRead" + accept=".png,.jpg,.jpeg,.bmp" > diff --git a/web/src/views/ChatPlus.vue b/web/src/views/ChatPlus.vue index 8611acc8..b45e9a32 100644 --- a/web/src/views/ChatPlus.vue +++ b/web/src/views/ChatPlus.vue @@ -187,6 +187,9 @@ :rows="2" placeholder="按 Enter 键发送消息,使用 Ctrl + Enter 换行" /> + + + @@ -290,6 +293,7 @@ import ConfigDialog from "@/components/ConfigDialog.vue"; import {checkSession} from "@/action/session"; import Welcome from "@/components/Welcome.vue"; import ChatMidJourney from "@/components/ChatMidJourney.vue"; +import FileSelect from "@/components/FileSelect.vue"; const title = ref('ChatGPT-智能助手'); const models = ref([]) @@ -875,6 +879,11 @@ const notShow = () => { localStorage.setItem(showNoticeKey.value + loginUser.value.username, true) showDemoNotice.value = false } + +// 插入文件路径 +const insertURL = (url) => { + prompt.value += " " + url + " " +}