mirror of
https://gitee.com/dromara/mayfly-go
synced 2025-12-29 19:06:35 +08:00
feat: linux文件上传成功通知调整
This commit is contained in:
@@ -2,7 +2,9 @@ package ws
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"mayfly-go/base/global"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
)
|
)
|
||||||
@@ -17,11 +19,43 @@ var Upgrader = websocket.Upgrader{
|
|||||||
|
|
||||||
var conns = make(map[uint64]*websocket.Conn, 100)
|
var conns = make(map[uint64]*websocket.Conn, 100)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
checkConn()
|
||||||
|
}
|
||||||
|
|
||||||
// 放置ws连接
|
// 放置ws连接
|
||||||
func Put(userId uint64, conn *websocket.Conn) {
|
func Put(userId uint64, conn *websocket.Conn) {
|
||||||
|
Delete(userId)
|
||||||
conns[userId] = conn
|
conns[userId] = conn
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func checkConn() {
|
||||||
|
heartbeat := time.Duration(20) * time.Second
|
||||||
|
tick := time.NewTicker(heartbeat)
|
||||||
|
go func() {
|
||||||
|
for range tick.C {
|
||||||
|
// 遍历所有连接,ping失败的则删除掉
|
||||||
|
for uid, conn := range conns {
|
||||||
|
err := conn.WriteControl(websocket.PingMessage, []byte("ping"), time.Now().Add(heartbeat/2))
|
||||||
|
if err != nil {
|
||||||
|
global.Log.Info("删除ping失败的websocket连接:uid = ", uid)
|
||||||
|
Delete(uid)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除ws连接
|
||||||
|
func Delete(userid uint64) {
|
||||||
|
conn := conns[userid]
|
||||||
|
if conn != nil {
|
||||||
|
conn.Close()
|
||||||
|
delete(conns, userid)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 对指定用户发送消息
|
// 对指定用户发送消息
|
||||||
func SendMsg(userId uint64, msg *Msg) {
|
func SendMsg(userId uint64, msg *Msg) {
|
||||||
conn := conns[userId]
|
conn := conns[userId]
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ export default {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ElNotification({
|
ElNotification({
|
||||||
|
duration: 0,
|
||||||
title: message.title,
|
title: message.title,
|
||||||
message: message.msg,
|
message: message.msg,
|
||||||
type: mtype as any,
|
type: mtype as any,
|
||||||
|
|||||||
@@ -79,6 +79,7 @@
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<el-upload
|
<el-upload
|
||||||
|
:before-upload="beforeUpload"
|
||||||
:on-success="uploadSuccess"
|
:on-success="uploadSuccess"
|
||||||
:headers="{ token }"
|
:headers="{ token }"
|
||||||
:data="{
|
:data="{
|
||||||
@@ -456,6 +457,10 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const beforeUpload = (file: File) => {
|
||||||
|
ElMessage.success(`'${file.name}' 上传中,请关注结果通知`)
|
||||||
|
}
|
||||||
|
|
||||||
const dontOperate = (data: any) => {
|
const dontOperate = (data: any) => {
|
||||||
const path = data.path;
|
const path = data.path;
|
||||||
const ls = [
|
const ls = [
|
||||||
@@ -518,6 +523,7 @@ export default defineComponent({
|
|||||||
deleteFile,
|
deleteFile,
|
||||||
downloadFile,
|
downloadFile,
|
||||||
getUploadFile,
|
getUploadFile,
|
||||||
|
beforeUpload,
|
||||||
uploadSuccess,
|
uploadSuccess,
|
||||||
dontOperate,
|
dontOperate,
|
||||||
formatFileSize,
|
formatFileSize,
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import (
|
|||||||
"mayfly-go/base/ctx"
|
"mayfly-go/base/ctx"
|
||||||
"mayfly-go/base/ginx"
|
"mayfly-go/base/ginx"
|
||||||
"mayfly-go/base/utils"
|
"mayfly-go/base/utils"
|
||||||
"mayfly-go/base/ws"
|
|
||||||
"mayfly-go/server/devops/api/form"
|
"mayfly-go/server/devops/api/form"
|
||||||
"mayfly-go/server/devops/api/vo"
|
"mayfly-go/server/devops/api/vo"
|
||||||
"mayfly-go/server/devops/application"
|
"mayfly-go/server/devops/application"
|
||||||
@@ -120,10 +119,9 @@ func (m *MachineFile) UploadFile(rc *ctx.ReqCtx) {
|
|||||||
g := rc.GinCtx
|
g := rc.GinCtx
|
||||||
fid := GetMachineFileId(g)
|
fid := GetMachineFileId(g)
|
||||||
path := g.PostForm("path")
|
path := g.PostForm("path")
|
||||||
|
|
||||||
fileheader, err := g.FormFile("file")
|
fileheader, err := g.FormFile("file")
|
||||||
biz.ErrIsNilAppendErr(err, "读取文件失败: %s")
|
biz.ErrIsNilAppendErr(err, "读取文件失败: %s")
|
||||||
// 通知正在上传
|
|
||||||
ws.SendMsg(rc.LoginAccount.Id, ws.NewMsg("文件上传", "文件上传中..."))
|
|
||||||
|
|
||||||
file, _ := fileheader.Open()
|
file, _ := fileheader.Open()
|
||||||
bytes, _ := ioutil.ReadAll(file)
|
bytes, _ := ioutil.ReadAll(file)
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ func (m *machineFileAppImpl) UploadFile(la *model.LoginAccount, fileId uint64, p
|
|||||||
|
|
||||||
createfile.Write(content)
|
createfile.Write(content)
|
||||||
// 保存消息并发送文件上传成功通知
|
// 保存消息并发送文件上传成功通知
|
||||||
m.msgApp.CreateAndSend(la, ws.SuccessMsg("文件上传", fmt.Sprintf("[%s]文件已成功上传至[%s]", filename, path)))
|
m.msgApp.CreateAndSend(la, ws.SuccessMsg("文件上传成功", fmt.Sprintf("[%s]文件已成功上传至[%s]", filename, path)))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ func (s *System) ConnectWs(g *gin.Context) {
|
|||||||
if err = ctx.PermissionHandler(rc); err != nil {
|
if err = ctx.PermissionHandler(rc); err != nil {
|
||||||
panic(biz.NewBizErr("没有权限"))
|
panic(biz.NewBizErr("没有权限"))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 登录账号信息
|
// 登录账号信息
|
||||||
la := rc.LoginAccount
|
la := rc.LoginAccount
|
||||||
ws.Put(la.Id, wsConn)
|
ws.Put(la.Id, wsConn)
|
||||||
|
|||||||
Reference in New Issue
Block a user