首页 > 编程语言 >开源单用户客服系统源码-上传附件功能-elementui 异步上传文件【唯一客服开发商】

开源单用户客服系统源码-上传附件功能-elementui 异步上传文件【唯一客服开发商】

时间:2023-05-10 17:22:26浏览次数:51  
标签:1024 return temp 客服 单用户 fileSize var 上传

之前开源的单用户客服系统,上传附件成功后,还不能展示出文件形式,今天把上传展示出文件形式给开发完善一下。

我想要实现的效果是,展示出文件的名称和大小信息

后端返回一个带有文件信息的json结果,前端把该信息组织一下并解析成可以展示的样子

后端golang部分代码

func UploadFile(c *gin.Context) {
    f, err := c.FormFile("realfile")
    if err != nil {
        c.JSON(200, gin.H{
            "code": 400,
            "msg":  "上传失败!",
        })
        return
    } else {

        fileExt := strings.ToLower(path.Ext(f.Filename))
        if f.Size >= 90*1024*1024 {
            c.JSON(200, gin.H{
                "code": 400,
                "msg":  "上传失败!不允许超过90M",
            })
            return
        }

        fileName := tools.Md5(fmt.Sprintf("%s%s", f.Filename, time.Now().String()))
        fildDir := fmt.Sprintf("%s%d%s/", common.Upload, time.Now().Year(), time.Now().Month().String())
        isExist, _ := tools.IsFileExist(fildDir)
        if !isExist {
            os.Mkdir(fildDir, os.ModePerm)
        }
        filepath := fmt.Sprintf("%s%s%s", fildDir, fileName, fileExt)
        c.SaveUploadedFile(f, filepath)
        c.JSON(200, gin.H{
            "code": 200,
            "msg":  "上传成功!",
            "result": gin.H{
                "path": filepath,
                "ext":  fileExt,
                "size": f.Size,
                "name": f.Filename,
            },
        })
    }
}

上传成功后返回的数据

前端组织成一定的格式调用发送消息接口

attachment[{"name":"常用密码等.doc","ext":".doc","size":10240,"path":"/static/upload/2023May/d485621f517c97abc255dd143b0464ba.doc"}]

 

展示的时候使用js去替换成一定的html字符串,写上样式进行展示

function replaceContent (content,baseUrl) {// 转义聊天内容中的特殊字符
    if(typeof baseUrl=="undefined"){
        baseUrl="";
    }
    var faces=placeFace();
    content = (content || '')
        .replace(/face\[(.*?)\]/g, function (face) {  // 转义表情
            var alt = face.replace(/^face/g, '');
            return '<img alt="' + alt + '" title="' + alt + '" src="'+baseUrl + faces[alt] + '">';
        })
        .replace(/img\[(.*?)\]/g, function (face) {  // 转义图片
            var src = face.replace(/^img\[/g, '').replace(/\]/g, '');;
            return '<img onclick="bigPic(src,true)" src="' +baseUrl+ src + '" style="max-width: 150px"/></div>';
        })
        .replace(/\n/g, '<br>'); // 转义换行
    content=replaceAttachment(content);
    return content;
}
//替换附件展示
function replaceAttachment(str){
    return str.replace(/attachment\[(.*?)\]/g, function (result) {
        var mutiFiles=result.match(/attachment\[(.*?)\]/)
        if (mutiFiles.length<2){
            return result;
        }
        //return result;

        var info=JSON.parse(mutiFiles[1])
        var imgSrc="";
        switch(info.ext){
            case ".mp3":
                imgSrc="/static/images/ext/MP3.png";
                break;
            case ".zip":
                imgSrc="/static/images/ext/ZIP.png";
                break;
            case ".txt":
                imgSrc="/static/images/ext/TXT.png";
                break;
            case ".7z":
                imgSrc="/static/images/ext/7z.png";
                break;
            case ".bpm":
                imgSrc="/static/images/ext/BMP.png";
                break;
            case ".png":
                imgSrc="/static/images/ext/PNG.png";
                break;
            case ".jpg":
                imgSrc="/static/images/ext/JPG.png";
                break;
            case ".jpeg":
                imgSrc="/static/images/ext/JPEG.png";
                break;
            case ".pdf":
                imgSrc="/static/images/ext/PDF.png";
                break;
            case ".doc":
                imgSrc="/static/images/ext/DOC.png";
                break;
            case ".docx":
                imgSrc="/static/images/ext/DOCX.png";
                break;
            case ".rar":
                imgSrc="/static/images/ext/RAR.png";
                break;
            case ".xlsx":
                imgSrc="/static/images/ext/XLSX.png";
                break;
            case ".csv":
                imgSrc="/static/images/ext/XLSX.png";
                break;
            default:
                imgSrc="/static/images/ext/default.png";
                break;
        }
        var html= `<div onclick="window.open('`+info.path+`')" class="productCard">
                        <div><img src='`+imgSrc+`' style='width: 38px;height: 38px;' /></div>
                        <div class="productCardTitle">
                            <div class="productCardTitle">`+info.name+`</div>
                            <div style="font-size: 12px;color: #666">`+formatFileSize(info.size)+`</div>
                        </div>
                    </div>`;
        return html;
    })
}
function formatFileSize(fileSize) {
    if (fileSize < 1024) {
        return fileSize + 'B';
    } else if (fileSize < (1024*1024)) {
        var temp = fileSize / 1024;
        temp = temp.toFixed(2);
        return temp + 'KB';
    } else if (fileSize < (1024*1024*1024)) {
        var temp = fileSize / (1024*1024);
        temp = temp.toFixed(2);
        return temp + 'MB';
    } else {
        var temp = fileSize / (1024*1024*1024);
        temp = temp.toFixed(2);
        return temp + 'GB';
    }
}

效果就是上面第一张图里的样子

开源代码库地址:

https://github.com/taoshihan1991/go-fly

线上商用官网演示地址:

https://gofly.v1kf.com

 

标签:1024,return,temp,客服,单用户,fileSize,var,上传
From: https://www.cnblogs.com/taoshihan/p/17388571.html

相关文章

  • 如何通过appuploader把ipa文件上传到App Store教程步骤​
    如何通过appuploader把ipa文件上传到AppStore教程步骤​iOSAPP上架AppStore其中一个步骤就是要把ipa文件上传到AppStore!​下面进行步骤介绍!​利用Appuploader这个软件,可以在Windows、Linux或Mac系统中申请ios和上传IPA到AppStoreConnect。​非常的方便,没有Mac也......
  • 寒武纪平台上传运行环境镜像
    前言学校的算力平台更换为了寒武纪平台,相较于以前简单的通过Linux用户隔离,使用难度有所提升。但从整体来看,这样拥有更好的隔离性,在docker中即便搞崩了也可以重新来过,可以避免因他人的误操作而导致自己的东西丢失。安装Docker从Docker官网下载Docker桌面版,安装过程均......
  • struts2 jpg文件上传失败 Content-Type not allowed 解决方案
    org.apache.struts2.interceptor.FileUploadInterceptor-Content-Typenotallowed:upload"upload__75549ca5_1239ddc5ce6__8000_00000161.tmp"image/pjpeg原有配置:用ext+struts2上传时一直显示进度条不消失:Java代码<actionname="xxxAction"cla......
  • 音频 caf转MP3 到上传服务端
    今天一个录制音频到服务端的功能音频录制 导入头文件#import<CoreMedia/CoreMedia.h>#import<AVFoundation/AVFoundation.h>两个对象@property(nonatomic,strong)AVAudioRecorder*audioRecorder;// 录音对象@property(nonatomic,strong)AVAudioPlayer*audioP......
  • 点击头像上传; post上传文件错误小记
    点击头像上传;post方式上传文件错误小记因为之前踩过这个坑所以记录一下,避免以后忘记1.上传报错的问题首先要实例化一个对象;总是会忘记这里的this指向监听元素节点;重点在于容易忘记this.files是一个数组;一定要取出来letfd=newFormData()letfile=this.fi......
  • IBM Power 740 7 单用户引导模式
     2、单用户引导模式在AIX上要进入单用户引导模式,只需把钥匙拨到维护(SERVICE)位置,然后系统上电即可。系统首先显示的是诊断操作指令(DiagnosticOperatingInstructions)的屏幕。在这幅屏幕按回车进入功能选择(FunctionSelection)菜单。类似如下图:FUNCTIO......
  • WSO2文件上传漏洞(CVE-2022-29464)
    WSO2文件上传漏洞(CVE-2022-29464)是OrangeTsai发现的WSO2上的严重漏洞。该漏洞是一种未经身份验证的无限制任意文件上传,允许未经身份验证的攻击者通过上传恶意JSP文件在WSO2服务器上获得RCE。访问春秋云镜靶场 访问地址并抓包改包为以下poc:POST/fileupload/toolsAnyHTTP/1......
  • 使用Git上传本地项目到GitHub/Coding/码云
    Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。本文以利用Git上传本地项目到GitHub为例,为那些刚刚接触Git的新手提供使用Git上传本地项目到GitHub/Coding/码云的方法。注册GitHub账号并安装Git首先注册GitHub账号,并添加新项目。下载......
  • Node + Express 后台开发 —— 上传、下载和发布
    上传、下载和发布前面我们已经完成了数据库的增删改查,在弄一个上传图片、下载csv,一个最简单的后台开发就已完成,最后部署即可。上传图片需求需求:做一个个人简介的表单提交,有昵称、简介和头像。后端能接收数据并保存到数据库。接收不到数据用amis-editor(amis低代码编辑器,更......
  • uniapp微信小程序,上传图片和表单数据一起提交
    弄表单上传,请求一直400错误,然后寻找其它方法uni.uploadFile({url:'http://localhost:6109/api/My/warrantyCard',//上传服务器的URLfilePath:this.ImgUrl,//本地图片的路径或临时文件路径......