当前位置:   article > 正文

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

开源客服系统java 源码

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

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

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

后端golang部分代码

  1. func UploadFile(c *gin.Context) {
  2. f, err := c.FormFile("realfile")
  3. if err != nil {
  4. c.JSON(200, gin.H{
  5. "code": 400,
  6. "msg": "上传失败!",
  7. })
  8. return
  9. } else {
  10. fileExt := strings.ToLower(path.Ext(f.Filename))
  11. if f.Size >= 90*1024*1024 {
  12. c.JSON(200, gin.H{
  13. "code": 400,
  14. "msg": "上传失败!不允许超过90M",
  15. })
  16. return
  17. }
  18. fileName := tools.Md5(fmt.Sprintf("%s%s", f.Filename, time.Now().String()))
  19. fildDir := fmt.Sprintf("%s%d%s/", common.Upload, time.Now().Year(), time.Now().Month().String())
  20. isExist, _ := tools.IsFileExist(fildDir)
  21. if !isExist {
  22. os.Mkdir(fildDir, os.ModePerm)
  23. }
  24. filepath := fmt.Sprintf("%s%s%s", fildDir, fileName, fileExt)
  25. c.SaveUploadedFile(f, filepath)
  26. c.JSON(200, gin.H{
  27. "code": 200,
  28. "msg": "上传成功!",
  29. "result": gin.H{
  30. "path": filepath,
  31. "ext": fileExt,
  32. "size": f.Size,
  33. "name": f.Filename,
  34. },
  35. })
  36. }
  37. }

上传成功后返回的数据

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

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

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

  1. function replaceContent (content,baseUrl) {// 转义聊天内容中的特殊字符
  2. if(typeof baseUrl=="undefined"){
  3. baseUrl="";
  4. }
  5. var faces=placeFace();
  6. content = (content || '')
  7. .replace(/face\[(.*?)\]/g, function (face) { // 转义表情
  8. var alt = face.replace(/^face/g, '');
  9. return '<img alt="' + alt + '" title="' + alt + '" src="'+baseUrl + faces[alt] + '">';
  10. })
  11. .replace(/img\[(.*?)\]/g, function (face) { // 转义图片
  12. var src = face.replace(/^img\[/g, '').replace(/\]/g, '');;
  13. return '<img onclick="bigPic(src,true)" src="' +baseUrl+ src + '" style="max-width: 150px"/></div>';
  14. })
  15. .replace(/\n/g, '<br>'); // 转义换行
  16. content=replaceAttachment(content);
  17. return content;
  18. }
  19. //替换附件展示
  20. function replaceAttachment(str){
  21. return str.replace(/attachment\[(.*?)\]/g, function (result) {
  22. var mutiFiles=result.match(/attachment\[(.*?)\]/)
  23. if (mutiFiles.length<2){
  24. return result;
  25. }
  26. //return result;
  27. var info=JSON.parse(mutiFiles[1])
  28. var imgSrc="";
  29. switch(info.ext){
  30. case ".mp3":
  31. imgSrc="/static/images/ext/MP3.png";
  32. break;
  33. case ".zip":
  34. imgSrc="/static/images/ext/ZIP.png";
  35. break;
  36. case ".txt":
  37. imgSrc="/static/images/ext/TXT.png";
  38. break;
  39. case ".7z":
  40. imgSrc="/static/images/ext/7z.png";
  41. break;
  42. case ".bpm":
  43. imgSrc="/static/images/ext/BMP.png";
  44. break;
  45. case ".png":
  46. imgSrc="/static/images/ext/PNG.png";
  47. break;
  48. case ".jpg":
  49. imgSrc="/static/images/ext/JPG.png";
  50. break;
  51. case ".jpeg":
  52. imgSrc="/static/images/ext/JPEG.png";
  53. break;
  54. case ".pdf":
  55. imgSrc="/static/images/ext/PDF.png";
  56. break;
  57. case ".doc":
  58. imgSrc="/static/images/ext/DOC.png";
  59. break;
  60. case ".docx":
  61. imgSrc="/static/images/ext/DOCX.png";
  62. break;
  63. case ".rar":
  64. imgSrc="/static/images/ext/RAR.png";
  65. break;
  66. case ".xlsx":
  67. imgSrc="/static/images/ext/XLSX.png";
  68. break;
  69. case ".csv":
  70. imgSrc="/static/images/ext/XLSX.png";
  71. break;
  72. default:
  73. imgSrc="/static/images/ext/default.png";
  74. break;
  75. }
  76. var html= `<div onclick="window.open('`+info.path+`')" class="productCard">
  77. <div><img src='`+imgSrc+`' style='width: 38px;height: 38px;' /></div>
  78. <div class="productCardTitle">
  79. <div class="productCardTitle">`+info.name+`</div>
  80. <div style="font-size: 12px;color: #666">`+formatFileSize(info.size)+`</div>
  81. </div>
  82. </div>`;
  83. return html;
  84. })
  85. }
  86. function formatFileSize(fileSize) {
  87. if (fileSize < 1024) {
  88. return fileSize + 'B';
  89. } else if (fileSize < (1024*1024)) {
  90. var temp = fileSize / 1024;
  91. temp = temp.toFixed(2);
  92. return temp + 'KB';
  93. } else if (fileSize < (1024*1024*1024)) {
  94. var temp = fileSize / (1024*1024);
  95. temp = temp.toFixed(2);
  96. return temp + 'MB';
  97. } else {
  98. var temp = fileSize / (1024*1024*1024);
  99. temp = temp.toFixed(2);
  100. return temp + 'GB';
  101. }
  102. }

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

开源代码库地址:

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

线上商用官网演示地址:

https://gofly.v1kf.com

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/1010672
推荐阅读
相关标签
  

闽ICP备14008679号