IM聊天教程之发送图片/视频/语音/表情

经常有朋友问起,如何在IM即时通讯中实现发送图片、视频、语音和表情?

为此,小编特意写了一个vue版本的Demo,实现了图片视频文件和表情的的发送,参考这个Demo源代码,相信你就可以轻松的用Uniapp和小程序完成类似的功能。

一、图片/视频/语音发送

对于语音、视频和图片的发送,您如果有注意的话,在使用QQ或者微信的时候,当有朋友发送图片和视频给您时,收到后,需要等一会儿才能显示出来。就是因为在发送的时候,只发送了文件的路径,您收到后,需要加载才能显示出来。因为当前主流的IM包括微信,QQ等对于图片和视频的发送,通常的做法都是:

  • 上传文件到文件服务器
  • 推送文件路径
  • 收到文件路径
  • 加载文件

并不会通过网络直接传送源文件,因为对于大文件的传输,会影响消息的即时性。

对于文件的上传,您可以选择直接上传到您自己的服务器,也可以选择上传到各种云服务的对象存储服务,也就是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就会立即显示为一个呲牙的表情,就像下图一样:

哈哈哈,相信你已经心里已经明白了十之八九了,对吧?

没错,表情在发送的过程中其实就是发一个像“/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',
}

然后画一个表情选择的界面:

第二步、选择表情

为每个图片的onclick事件中传入这个表情的字符串标签,当用户点击的时候,将表情的标签写入输入框,就成为了一个普通的字符串。在发送的时候,发送的其实就是这个表情的标签,也就是一个字符串。

<div class="goeasy-expression">
      <div :class="[appearanceClass, 'goeasy-appearance']" @click="show = true">{{text}}</div>
      <div class="expression-container" v-show="show">
        <div class="expression-icon-content">
          <div class="expression-icon__item"
             v-for="expression in list"
             :key="expression.id"
             @click="selectExpression(expression)">
            <img :src="expressions[expression.tag]">
          </div>

        </div>
        <div class="close-expression" @click="show = false"></div>
      </div>
    </div>

第三步、收到表情和展示表情

当对方收到一个字符串后,跟第一步定义的key-value列表去匹配,如果能找到对应的表情,就在页面上展示对应的表情图片,如果找不到,就是一个普通的文本信息。

原理讲清楚了后,具体实现是不是很简单了?

参考我们提供的Demo源代码,相信你很快就能掌握实现方法。

Demo源码:https://gitee.com/goeasy-io/GoEasyDemo-vue-AudioPictureVideo

总结

到此这篇关于IM聊天教程之发送图片/视频/语音/表情的文章就介绍到这了,更多相关IM聊天发送视频内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用Python AIML搭建聊天机器人的方法示例

    AIML全名为Artificial Intelligence Markup Language(人工智能标记语言),是一种创建自然语言软件代理的XML语言,是由RichardS. Wallace 博士和Alicebot开源软件组织于1995-2000年间发明创造的.AIML是一种为了匹配模式和确定响应而进行规则定义的 XML 格式. AIML的设计目标如下: AIML应当为大众所易学易会. AIML应当使最小的概念得以编码使之基于L.I.C.E支持一种刺激-响应学科系统组件. AIML应当兼容XM

  • JavaScript/jQuery、HTML、CSS 构建 Web IM 远程及时聊天通信程序

    以及需要用到Http方式和Openfire通信的第三方库(JabberHTTPBind). JabberHTTPBind是jabber提供的XMPP协议通信的Http bind发送的形式,它可以完成WebBrowser和Openfire建立长连接通信. 主要通信流程如下图所示: 用户A通过JavaScript jsjac.js库发送一条消息到JabberHTTPBind这个Servlet容器,然后JabberHTTPBind的Servlet容器会向Openfire发送XMPP协议的XML报文.O

  • 基于Python如何使用AIML搭建聊天机器人

    借助 Python 的 AIML 包,我们很容易实现人工智能聊天机器人.AIML,全名为Artificial Intelligence Markup Language(人工智能标记语言),是一种创建自然语言软件代理的XML语言,是由Richard Wallace和世界各地的自由软件社区在1995年至2002年发明的. AIML 是什么? AIML由Richard Wallace发明.他设计了一个名为 A.L.I.C.E. (Artificial Linguistics Internet Comp

  • Websocket IM聊天教程 教你用GoEasy快速实现IM聊天

    经常有朋友问起GoEasy如何实现IM,今天就手把手的带大家从头到尾用GoEasy实现一个完整IM聊天,全套代码已经放在了github. 今日的前端技术发展可谓百花争鸣,为了确保本文能帮助到使用任何技术栈的前端工程师,Demo的源码实现上选择了最简单的HTML+JQuery的方式,所以,不论您是准备用Uniapp开发移动APP,还是准备写个小程序,不论你喜欢用React还是VUE,还是React-native或ionic, 或者您直接用原生 和Type ,都是可以轻松理解,全套代码已经放在git

  • Android中基于XMPP协议实现IM聊天程序与多人聊天室

    简单的IM聊天程序 由于项目需要做一个基于XMPP协议的Android通讯软件.故开始研究XMPP. XMPP协议采用的是客户端-服务器架构,所有从一个客户端发到另一个客户端的消息和数据都必须经过XMPP服务器转发,而且支持服务器间DNS的路由,也就是说可以构建服务器集群,使不同的 服务器下的客户端也可以通信,XMPP的前身是一个开源组织制定的网络通信协议--Jabber,XMPP的核心是在网络上分片段发送XML流的协议,这个协议是XMPP的即时通讯指令的传递手段.       为了防止服务器间

  • php版小黄鸡simsimi聊天机器人接口分享

    复制代码 代码如下: <?phpfunction simsimi($keyword) { $keyword = urlencode(urlencode($keyword)); //----------- 获取COOKIE ----------// $url = "http://www.simsimi.com/"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER,1); curl_setopt($ch, CURLOPT_

  • IM聊天教程之发送图片/视频/语音/表情

    经常有朋友问起,如何在IM即时通讯中实现发送图片.视频.语音和表情? 为此,小编特意写了一个vue版本的Demo,实现了图片视频文件和表情的的发送,参考这个Demo源代码,相信你就可以轻松的用Uniapp和小程序完成类似的功能. 一.图片/视频/语音发送 对于语音.视频和图片的发送,您如果有注意的话,在使用QQ或者微信的时候,当有朋友发送图片和视频给您时,收到后,需要等一会儿才能显示出来.就是因为在发送的时候,只发送了文件的路径,您收到后,需要加载才能显示出来.因为当前主流的IM包括微信,QQ等

  • java微信企业号开发之发送消息(文本、图片、语音)

    上篇文章介绍了开启回调模式,开始回调模式后我们就要实现聊天功能了.平时使用微信聊天可以发送文本消息.语音.图片.视频等,这里只实现了其中的一些功能和大家分享. 一.与微信企业号建立连接 1.企业应用调用企业号提供的接口,管理或查询企业号后台所管理的资源.或给成员发送消息等,以下称主动调用模式. 2.企业号把用户发送的消息或用户触发的事件推送给企业应用,由企业应用处理,以下称回调模式. 3.用户在微信中阅读企业应用下发的H5页面,该页面可以调用微信提供的原生接口,使用微信开放的终端能力,以下称JS

  • python教程十行代码教你语音转文字QQ微信聊天

    目录 QQ语音识别 微信语音 读取文件 识别本地文件 QQ和微信这两款都是非常受人喜欢的聊天交友软件!可能大家平时没有留意到,也或者是大家可能很少用微信,或者很少用QQ吧!所以可能没有留意这些小细节! 截图是没发现微信的语音识别在哪里!可能是小编微信玩少了吧,一般情况来讲都是不玩微信的! QQ语音识别 微信语音 要调用百度AI开放平台的API,首先需要一个百度账号.我想注册百度账号的过程应该不用向大家详细介绍了,大家应该在这边都是没啥问题的.需要注意的是,百度账号的安全性挺差的,不知为啥本人的账

  • python使用socket高效传输视频数据帧(连续发送图片)

    目录 遇到的问题 代码问题记录(需要代码的可以直接文末) 代码 客户端clien.py 服务端server.py 遇到的问题 网上找了一些代码,都是只能建立一次socket传输一张图片,然后断开重新连重新传.而建立一次socket代价不小,反复建立会非常消耗系统资源,因此尝试自己通过一次socket连续传输多张图片 代码问题记录(需要代码的可以直接文末) 在做的过程中发现了一些问题: socket在传一张图片时是以二进制流的形式传输,图片的二进制流比较大,一般一次传不完,要传很多次.那么接受者是

  • Python图片视频超分模型RealBasicVSR的使用教程

    目录 前言 安装 1.虚拟环境创建 2.安装pytorch 3.安装openmim 4.安装mmcv-full 5.安装mmedit 6.安装scipy 7.模型下载 使用 图片超分 视频超分 压缩图片为对比视频样例 总结 前言 很久没更新这个专栏了,最近比较忙.前段时间看到了这个模型觉着很有意思,弄下来自己玩了玩,但是没时间写文章,一直搁置到现在. 废话不多说,先上Github地址: RealBasicVSR地址 从给出的效果来看,还是很不错的,左侧是超分后的画面,右边是原画质,得到明显提升.

  • Asp.net使用SignalR实现发送图片

    一.引言 在前一篇已经介绍了如何使用SignalR来实现聊天室的功能,在这篇文章中,将实现如何使用SignalR来实现发送图片的功能. 二.实现发送图片的思路 我还是按照之前的方式来讲述这篇文章,首先,让我们来理清下实现发送图片功能的思路. 图片的显示,除了直接指定图片的路径外(这种实现方式也称为:http URI schema),还可以通过Data Uri Schema的方式来显示图片.这种方式允许在网页里以字符串形式直接内嵌图片.形式如下所示: 复制代码 代码如下: <img src="

  • JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法

    废话不多说了,直接给大家贴代码了,具体代码如下所示: // 上传目标触发点 <input type="file" class="upvideo" name="upvideo" id="fileupload1" /> // 引入插件 <script type="text/javascript" src="{$IMG}/bstage/js/jquery.form.js" l

  • java实现新浪微博Oauth接口发送图片和文字的方法

    本文实例讲述了java实现新浪微博Oauth接口发送图片和文字的方法.分享给大家供大家参考.具体如下: 基于网上很多人利用新浪api开发新浪微博客户端的时候遇到无法发图片的问题,很多人卡在了这一布.现将代码呈上,希望能帮到一些朋友. /** * 发表带图片的微博 * @param token * @param tokenSecret * @param aFile * @param status * @param urlPath * @return */ public String uploadS

  • layui内置模块layim发送图片添加加载动画的方法

    layim图片上传时可能会因网络等原因导致图片上传速度慢,而前端此时不给于任何提示的话会导致用户体验差,因此我们需在图片上传方法稍加拓展,具体思路即在发出请求前加载动画,上传完成后关闭动画,具体代码如下: 1.在js中找到图片上传方法,添加如下代码: PC端layim.js 移动端layim-mobile.js 以上这篇layui内置模块layim发送图片添加加载动画的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

随机推荐