# GoEasyDemo-vue-AudioPictureVideo **Repository Path**: IUIUV/GoEasyDemo-vue-AudioPictureVideo ## Basic Information - **Project Name**: GoEasyDemo-vue-AudioPictureVideo - **Description**: 快速实现发送图片/视频/表情 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2020-07-14 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 快速实现发送图片/视频/表情 ![image](./vue-AudioPictureVideo-gif.gif) ### 获取GoEasy Appkey ``` 先注册一个账号,登录后,创建一个应用,就能得到您的appkey。 ``` ### 配置您的appkey ``` 在demoService.js,将appkey替换为您自己的common key ``` ## 项目构建 ``` npm install ``` ### 项目运行(开发环境) ``` npm run serve ``` # GoEasy教程:IM即时通讯中发送图片/视频/语音/表情实现原理解析 经常有朋友问起,如何在IM即时通讯中实现发送图片、视频、语音和表情? 为此,小编特意写了一个vue版本的Demo,实现了图片视频文件和表情的的发送,参考这个Demo源代码,相信你就可以轻松的用Uniapp和小程序完成类似的功能。 本文的demo全套的源码已经开源在码云上,供大家clone或者下载:[https://gitee.com/goeasy-io/GoEasyDemo-vue-AudioPictureVideo](https://gitee.com/goeasy-io/GoEasyDemo-vue-AudioPictureVideo) # 一、图片/视频/语音发送 对于语音、视频和图片的发送,您如果有注意的话,在使用QQ或者微信的时候,当有朋友发送图片和视频给您时,收到后,需要等一会儿才能显示出来。就是因为在发送的时候,只发送了文件的路径,您收到后,需要加载才能显示出来。因为当前主流的IM包括微信,QQ等对于图片和视频的发送,通常的做法都是: 1. 上传文件到文件服务器 1. 推送文件路径 1. 收到文件路径 1. 加载文件 并不会通过网络直接传送源文件,因为对于大文件的传输,会影响消息的即时性。 对于文件的上传,您可以选择直接上传到您自己的服务器,也可以选择上传到各种云服务的对象存储服务,也就是OSS上。 参考源码: ``` DemoService.prototype.sendFileMessage = function (type,content) { let uploadResult = restapi.uploadFile(content); let message = new Message(type, uploadResult.url); uploadResult.promise.then(() => { this.publish(message); },() => { var error = new Message(MessageType.TEXT, "文件上传失败."); this.messages.unshift(error) }); return uploadResult.promise; }; ``` 云服务的OSS具有更好的稳定性和高可用性,上传的速度也有保证,另外也可以和CDN配合,所以我们建议用GoEasy配合OSS服务来实现图片和视频的发送。 在本文的源码里,选择了使用阿里云的OSS作为文件上传服务器,您也可以切换为您自己实现的文件上传服务器,或者选择其他云服务的OSS,原理都是一样的。 # 二、发送表情 表情的发送也是非常简单的,只是对于一些第一次实现表情发送的同学来说,需要一个思路而已。 细心点的朋友,肯定有发现,当我们在QQ上聊天的时候,我们输入一个反斜杠+“cy”, 就像这样:/cy ,QQ就会立即显示为一个呲牙的表情,就像下图一样: ![image](https://www.goeasy.io/articles/wp-content/uploads/2020/05/2-2.png) 哈哈哈,相信你已经心里已经明白了十之八九了,对吧? 没错,表情在发送的过程中其实就是发一个像“/cy”这样定义好的的字符串,在对方收到后“翻译”成表情而已。 那为什么不直接发图片,而要进行这么复杂的“翻译”呢? 因为字符串比图片更小,发送的速度更快,用户体验更好。一个系统中的用户成千上万,用字符串可以节约大量的带宽,节约系统资源。 原理讲明白了,我们就开始干活儿吧: **第一步、定义表情** 定义一个key value的对象,key作为表情标签,value则为每个表情标签对应的图片: ``` let expressions = { "[risus]": './images/risus.png', "[kiss]": './images/kiss.png', "[cry]": './images/cry.png', "[die]": './images/die.png', "[anger]": './images/anger.png', } ``` 然后画一个表情选择的界面: ![image](https://www.goeasy.io/articles/wp-content/uploads/2020/05/3.png) **第二步、选择表情** 为每个图片的onclick事件中传入这个表情的字符串标签,当用户点击的时候,将表情的标签写入输入框,就成为了一个普通的字符串。在发送的时候,发送的其实就是这个表情的标签,也就是一个字符串。 ```
{{text}}
``` **第三步、收到表情和展示表情** 当对方收到一个字符串后,跟第一步定义的key-value列表去匹配,如果能找到对应的表情,就在页面上展示对应的表情图片,如果找不到,就是一个普通的文本信息。 原理讲清楚了后,具体实现是不是很简单了? 参考我们提供的Demo源代码,相信你很快就能掌握实现方法。 Demo源码:[https://gitee.com/goeasy-io/GoEasyDemo-vue-AudioPictureVideo](https://gitee.com/goeasy-io/GoEasyDemo-vue-AudioPictureVideo) ### 附录:阿里云OSS简单使用流程 ``` 注册阿里云账号 https://www.aliyun.com/ 开通OSS服务 创建存储空间Bucket 将以下配置放入本工程的assets/js/upload/aliyunoss/AliyunOSSConfig.js中的对应位置 在Bucket列表中获取 Bucket域名 在个人账户(鼠标悬浮个人头像)进入AccessKey管理,获取 AccessKeySecret OSSAccessKeyId 配置读权限 bucket列表 -> bucket -> 权限管理 -> 读写权限(改为公共读) 注意事项: 1、此Demo为了方便演示使用纯H5上传OSS,真实项目中根据自己的业务场景选择上传方式。具体方式查看OSS的上传方式,如果你不想使用阿里云的OSS,在assets/js/restapi中替换成自己的上传方式。 2、使用OSS过程中,你可能会遇到跨域问题,在bucket列表 -> bucket -> 权限管理 -> 跨域设置 -> 创建规则(根据自己的需求创建跨域规则) ```