IM聊天图片发送有两种方式

图片剪切粘贴,使用QQ或者其他平台的截图功能,截图后粘贴 Ctrl+V ,这个过程需要获取粘贴板上的图片数据,并在页面中展示,也就是将图片数据创建一个img元素,就可以显示出来了。
从粘贴面板中获取图片数据
/**
* 黏贴发送图片
* @param e
*/
pasteData(e) {
e.preventDefault();
let clipboardData = e.clipboardData;
if (clipboardData) { //如果支持这个
let items = clipboardData.items; //获取黏贴里的对象
if (!items) {
return;
}
let item;
let types = clipboardData.types || [];
for (let i = 0, len = types.length; i< len; i++) {
if (types[i] === 'Files') {
item = items[i];
break;
}
}
if (item && item.kind === 'file' && item.type.match(/^image\//i)) {
imgReader(item);
}
}
functionimgReader(obj){
let $messageBox=$('#message-boxID');
let file = obj.getAsFile(),
reader = new FileReader();
// 读取文件
reader.readAsDataURL(file);
reader.onload = function(e){
let img = new Image();
img.src = e.target['result'];
img.className = 'chatImg';
$messageBox.append(img);
setTimeout(()=> {
$messageBox.scrollTop($messageBox[0].scrollHeight);
}, 0)
};
}
}
本地图片选择
<inputid="upImg"name="fileTrans"type="file"(change)="onFileSelect($event)"/>
/**
* 选择图片
* @param event
*/
files:any[]=[];
onFileSelect(event) {
this.files=[];
let files = event.dataTransfer ? event.dataTransfer.files : event.target.files;
let file;
for (let i = 0; i < files.length; i++) {
file = files[i];
if (this.isImage(file)) {
file.objectURL = this.sanitizer.bypassSecurityTrustUrl((window.URL.createObjectURL(files[i])));
this.files.push(files[i]);
}
}
let fileUrl = file.objectURL.changingThisBreaksApplicationSecurity;
let img = new Image();
img.src = fileUrl;
img.className = 'chatImg';
$('#message-boxID').append(img);
}
图片上传服务器
前端angular上传图片到服务器,必然是ajax请求的方式,将图片数据转成二进制流传给后端了。
url:string="http://localhost:8080/upload";
progress:number=0;//进度
uploadPic(formData):Promise<any> {
let xhr = new XMLHttpRequest(),
//封装xhr请求
return new Pormise(resolve,reject){
xhr.upload.addEventListener('progress', (e: ProgressEvent) => {
if(e.lengthComputable) {
this.progress = Math.round((e.loaded * 100) / e.total);
}
}, false);
xhr.onreadystatechange = ()=> {
if(xhr.readyState == 4) {
this.progress = 0;
if(xhr.status >= 200 && xhr.status < 300)
resolve({xhr: xhr, files: this.files});
else
reject({xhr: xhr, files: this.files});
}
};
xhr.open('POST', this.url, true);
//jwt后端验证,设置请求头部信息,解决跨域
xhr.setRequestHeader("Authorization", "Basic " + localStorage.getItem('jwt'));
xhr.send(formData);
}
}
将以上方法写到一个 upload-file.servie.ts 中。然后其他地方就可以使用 uploadFileService.uploadPic() 方法调用了。
这里后端代码忽略,后端Java或者nodejs都很简单,接收文件二进制流保存,或者是上传到百度云与阿里云。
信息发送按钮处理
发送信息处理,需要处理好文本信息和图片信息两种。
/**
* dataURL to blob, ref to https://gist.github.com/fupslot/5015897
* @param dataURI
* @returns {Blob}
*/
functiondataURItoBlob(dataURI){
var byteString = atob(dataURI.split(',')[1]);
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
var ab = new ArrayBuffer(byteString.length);
var ia = new Uint8Array(ab);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ab], {type: mimeString});
}
/**
* 发送消息
* @param taskValue
*/
sendMessage() {
let dateTime = this.dateFromat.FormatDate(new Date());
let value = $('#message-boxID').html();
let isImg = value.includes('<img');
//如果是图片信息
if (isImg) {
let formData = new FormData();
let dataURL="";
let src=$(value)[0].src;
//图片截图粘贴
if(src.includes('data:images')){
dataURL=src;
let blob = dataURItoBlob(dataURL);
formData.append('file', blob);
//图片本地选择
}else if(src.includes('blob:http')){
//files是图片选择时保存的图片文件对象,见onFileSelect方法
for(let i = 0; i < this.files.length; i++) {
formData.append('file', this.files[i], this.files[i].name);
}
}
//调用上传图片方法
this.uploadFileService.uploadPic(formData).then(result=>{
//上传成功,do something
console.log(result);
}).catch(err=>{
console.log('图片上传失败'+err);
})
}else{
//非图片信息,文本发送
//this.submitMessage(value);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# angular图片发送
# angular
# IM图片发送
# IM聊天图片发送
# 详解Angularjs 如何自定义Img的ng-load 事件
# Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
# Angular2-primeNG文件上传模块FileUpload使用详解
# Angular2 PrimeNG分页模块学习
# AngularJS定时器的使用与移除操作方法【interval与timeout】
# AngularJs中Bootstrap3 datetimepicker使用实例
# AngularJS中$watch和$timeout的使用示例
# 仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
# angularjs封装bootstrap时间插件datetimepicker
# 后端
# 上传图片
# 就可以
# 图片上传
# 两种
# 并在
# 都很
# 或者是
# 将以
# 写到
# 有两种
# 或者其他
# 创建一个
# 转成
# 大家多多
# 板上
# 端了
# 发送消息
# 上传
# 出来了
相关文章:
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
如何通过多用户协作模板快速搭建高效企业网站?
如何用5美元大硬盘VPS安全高效搭建个人网站?
建站之星导航菜单设置与功能模块配置全攻略
建站之星安全性能如何?防护体系能否抵御黑客入侵?
北京企业网站设计制作公司,北京铁路集团官方网站?
用v-html解决Vue.js渲染中html标签不被解析的问题
网站制作公司,橙子建站是合法的吗?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
如何选择域名并搭建高效网站?
一键网站制作软件,义乌购一件代发流程?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
免费网站制作appp,免费制作app哪个平台好?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
广州美橙建站如何快速搭建多端合一网站?
如何在建站之星绑定自定义域名?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
如何在服务器上三步完成建站并提升流量?
西安专业网站制作公司有哪些,陕西省建行官方网站?
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
建站之星如何开启自定义404页面避免用户流失?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
网站制作难吗安全吗,做一个网站需要多久时间?
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
建站之星安装提示数据库无法连接如何解决?
湖北网站制作公司有哪些,湖北清能集团官网?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
网站制作免费,什么网站能看正片电影?
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
建站之星伪静态规则如何正确配置?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
如何做静态网页,sublimetext3.0制作静态网页?
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
如何在阿里云部署织梦网站?
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
头像制作网站在线制作软件,dw网页背景图像怎么设置?
网站制作员失业,怎样查看自己网站的注册者?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
建站之星如何修改网站生成路径?
广东专业制作网站有哪些,广东省能源集团有限公司官网?
招商网站制作流程,网站招商广告语?
Swift中switch语句区间和元组模式匹配
智能起名网站制作软件有哪些,制作logo的软件?
如何做网站制作流程,*游戏网站怎么搭建?
建站之星收费标准详解:套餐费用及年费价格表一览
*请认真填写需求信息,我们会在24小时内与您取得联系。