前端复制粘贴方式上传图片

news2025/1/10 8:24:05

最近在做一个论坛的项目,发布评论的时候,很多时候会用到截图上传的功能,通过微信截图,QQ截图,直接将截取的图片通过Ctrl+v 复制到输入框里,自动上传将图片渲染到页面上,今天就来实现一个这样的功能。

主要的知识点是,浏览的paste事件,clipboardData

paste 一个标准的Dom事件,粘贴事件,会在用户按下Ctrl+v ,或者通过鼠标复制时触发.像其他事件一样,我们可以通过addEventListener为一个Element添加一个粘贴事件的监听函数 如以下代码。

document.addEventListener('paste', (event) => {
  console.log('粘贴事件', event)
});
复制代码

Copy

第一步,实现图片粘贴到输入框

我使用vue,给多行输入框绑定一个v-paster的自定义指令,这个自定义指令直接监听元素的粘贴事件。



复制代码

Copy

// 指令粘贴指令定义
	directives: {
	    paste: {
	      bind(el, binding, vnode) {
	        el.addEventListener('paste', function (event) {
	          //这里直接监听元素的粘贴事件
	          binding.value(event);
	        });
	      },
	    },
	},
复制代码

Copy

第二步,通过监听paste事件获取文件数据,实现粘贴即上传

paste 一个标准的Dom事件,粘贴事件,会在用户按下Ctrl+v ,或者通过鼠标复制时触发.像其他事件一样,在下面的代码中我打印的是一个叫做ClipboardEvent的对象,内部存在着一个叫做clipboardData的属性,这便是我们在复制时存储数据的对象。 其中的items就是我们要操作的对象,需要粘贴的元素都在其中存储。

然后调用FileReader对象,该方法有两个参数,其中第二个参数是文本的编码方式,默认值为 UTF-8。这个方法非常容易理解,将文件以文本方式读取,读取的结果即是这个文本文件中的内容。
**readAsBinaryString:**该方法将文件读取为二进制字符串,通常我们将它传送到后端,后端可以通过这段字符串存储文件。
**readAsDataURL:**这是例子程序中用到的方法,该方法将文件读取为一段以 data: 开头的字符串,这段字符串的实质就是 Data URL,Data URL是一种将小文件直接嵌入文档的方案。这里的小文件通常是指图像与 html 等格式的文件。

最后组装为一个formData对象上传

//微信截图上传图片时触发
handleParse(e) {
	let file = null;
	var data=e.clipboardData||window.clipboardData, that = this;
	console.log('fun',data);
	blob=data.items[0].getAsFile();
	var isImg=(blob&&1)||-1;
	var reader=new FileReader();
	if(isImg>=0){
		//将文件读取为 DataURL
		reader.readAsDataURL(blob);
	}
	reader.onload=function(event){
	//获取base64流
	var base64_str=event.target.result;
	//div中的img标签src属性赋值,可以直接展示图片
	// console.log('base64_str',base64_str);
	var bytes = window.atob(base64_str.split(',')[1]);
	var array = [];
	for(var i = 0; i < bytes.length; i++){
		array.push(bytes.charCodeAt(i));
	}
	var blob = new Blob([new Uint8Array(array)], {type: 'image/jpeg'});
	var formData = new FormData();
		formData.append('file',blob, Date.now() + '.jpg');
		formData.append('filename', 'file')
		console.log(blob);
		that.update(formData);
	}
},
update(formData) {
	 // 上传
	fetch('http://xxx/xxx',{
	method: 'post',
	headers: {
		authorization: localStorage.getItem('token')
	},
	body: formData
	}).then(response => response.json()).then(res=>{
		let pic = res.data.url;
		
	})
},
复制代码

Copy

关于fetch上传图片,在上面的示例中其实失败了很久,最后找到的原因是请求头的content-type,我填了application/json和MulitPart/form-data 均不能成功上传,最后去掉这个content-type才上传成功。原因是fetch 作为浏览器自身提供的api,当传入的参数为 formDate 格式时,不可手动设置content-type。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/75330.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BOS金蝶云星空:表单插件设置单据体背景色

一.效果图&#xff1a; 备注&#xff1a;只适用于只读列 二.代码案例&#xff1a; 自定义单据提附加背景色方法&#xff1a; /// /// 设置单据体背景颜色 /// /// 实体 /// 行 /// 字段 /// 颜色代码 private void SetEntityBackgoundColor(string entityKey, int row, st…

【面试题】大厂面试题分享:如何让(a===1a===2a===3)的值为true?

大厂面试题分享 面试题库 前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 当我第一次看到这一题目的时候&#xff0c;我是比较震惊的&#xff0c;分析了下很不合我们编程的常理&#xff0c;并认为不大可能&#…

面试官:断网了,还能 ping 通 127.0.0.1 吗?

你女神爱不爱你&#xff0c;你问她&#xff0c;她可能不会告诉你。 ‍ 但网通不通&#xff0c;你 ping 一下就知道了。 可能看到标题&#xff0c;你就知道答案了&#xff0c;但是你了解背后的原因吗&#xff1f; 那如果把 127.0.0.1 换成 0.0.0.0 或 localhost 会怎么样呢&…

Win10用命令行编译带有cuda的opencv

0. 环境 笔记本win10 NVIDIA GeForce GTX 1660 Ti 1. 准备x64 Native Tools Command Prompt 1.1 准备Visual Studio Installer 需要安装visual studio 2019 1.2 安装工作负荷 为了安装x64 Native Tools Command Prompt&#xff0c;勾上使用C的桌面开发 安装完毕后&#xf…

Latent Class Modeling lca

潜类别模型&#xff08;Latent Class Modeling&#xff09; 潜在类别分析&#xff08;LCA&#xff09;数据分析流程&#xff08;详细版&#xff09; - 简书 (jianshu.com) R数据分析&#xff1a;用R语言做潜类别分析LCA - 知乎 (zhihu.com) About Latent Class Modeling -…

Postman(六): postman定义公共函数

Postman(11): postman定义公共函数 postman定义公共函数 在postman中&#xff0c;如下面的代码&#xff1a; 1、返回元素是否与预期值一致 var assertEqual(name,actual,expected)>{tests[${name}&#xff1a;实际结果&#xff1a; ${actual} &#xff0c; 期望结果&…

PDF转Excel怎么转?这些方法值得收藏

在我们的工作生活中&#xff0c;避免不了Excel表格的使用&#xff0c;当我们遇到想要将PDF文件中的信息转换制作成表格的时候&#xff0c;要怎么做呢&#xff1f;毕竟&#xff0c;PDF文件是一个不易编辑的格式&#xff0c;我们想复制其中的内容就较为的麻烦。一般这种时候&…

何止一个惨字形容,水滴 Java 面试一轮游,壮烈了,问啥啥不会,数据库血崩

static 关键字是用来干什么的&#xff0c;static 修饰的方法里面可以使用非静态的成员变量吗&#xff0c;为什么呢 private 修饰的方法是否可以被子类覆盖 覆盖和重载有什么区别 进程跟线程的区别 Java 中创建线程有几种方式 a. 反思&#xff1a;讲完三种方式之后&#xff…

Python——文件

文件 概念 我们常见的txt,jpg,mp4等等都是文件&#xff0c;存储在硬盘中的内容&#xff0c;就是文件&#xff0c;而文件夹是一种特殊的文件——目录文件 路径 一层一层文件夹组成的字符串就是路径&#xff0c;每一个文件的路径都是唯一的&#xff0c;相当于身份证号&#x…

卷积、自相关函数、功率谱密度

文章目录1、自相关函数和卷积2、自相关函数的傅里叶变换最近我在思考为什么&#xff1a; 为什么随机过程的自相关函数和其功率谱密度是一对傅里叶变换&#xff1f;1、自相关函数和卷积 这俩跟孪生兄弟似的&#xff0c;经常一起出现&#xff0c;我们先来看看自相关函数和卷积的…

【读书笔记】曾国藩的正面与侧面(二)

本书为全集的第二册&#xff0c;针对曾国藩的整个家族进行了介绍。包括他的兄弟&#xff0c;父母&#xff0c;和子女。 曾国藩的兄弟&#xff1a; 曾国潢&#xff1a;比曾国藩小9岁 是几个兄弟中读书天分最差的一个&#xff0c;但是有一个优点就是勤奋实在&#xff0c;所以在…

案例故事丨老虎国际 x TiDB ,降低架构复杂性,保障全球用户安全可靠投资

券商是一个古老的行业&#xff0c;发展至今已经历了三个时代&#xff1a;第一代券商为传统券商&#xff0c;在线下交易大厅进行买卖&#xff1b;第二代券商开始了电子化进程&#xff0c;从线下到线上进行了浅层服务的转移&#xff0c;改善了用户体验&#xff0c;提高了金融服务…

复习计算机网络——第四章习题记录

1、一台交换机具有24个100Mbps的全双工端口和2个1000Mbps的全双工端口&#xff0c;如果所有的端口都工作在全双工状态&#xff0c;那么交换机总带宽等于: 交换机知识点&#xff1a; &#xff08;1&#xff09;交换机具有24个10或者100Mbps全双工端口连接一般的用户计算机&…

python脚本系列——批量下载清华开源依赖包

一、脚本展示 1.流水线编译过程&#xff0c;执行apk --update add --no-cache xxx 2.报错ERROR&#xff1a; xxx package mentioned in index not found (try apk update) 3.内网环境缺依赖包&#xff0c;需要从清华源下载对应的包&#xff0c;但是需要根据报错一个个找&#x…

[附源码]计算机毕业设计教学辅助系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

1558_AURIX_TC275_RCU模块中的ESR管脚

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) CPU的安全状态&#xff0c;如果有bit为0说明SRAM等内容可能是不可靠的。 1. ESR的管脚是可以实现对外输出复位提示信息功能的。 2. ESR管脚的几种用法&#xff1a;作为输入触发复位、作为…

双重预防体系智能管理系统助力集团施工企业落实双重预防机制建设

安全警钟长鸣&#xff0c;为何事故仍不时发生?说明“安全网”织得不够密。当前我国建筑施工安全生产方面存在诸多薄弱环节和突出问题&#xff0c;强化安全生产主体责任落实&#xff0c;全面构建安全风险分级管控和隐患排查治理双重预防工作机制&#xff0c;坚决防范和遏制较大…

如何应对项目上线前出现Bug?

当你在测试阶段最后两天&#xff0c;发现测试执行情况不理想&#xff0c;和预估的进度相差较大时&#xff0c;是否会焦虑到不知所措&#xff1f;当你在上线前发现一个严重的问题&#xff0c;修复后需要重新执行一些验证测试及增加回归测试&#xff0c;此时你是否会惊慌&#xf…

使用nvm管理(切换)node版本

使用nvm切换node版本1. 完全删除之前的node及npm&#xff08;清理干净Node: 应用程序&#xff0c;缓存的文件&#xff0c;环境变量 &#xff09;2. 使用管理员身份安装nvm&#xff0c;下载如下3. 安装完nvm之后找到nvm下载路径对应的文件4. 使用管理员身份打开cmd&#xff0c;n…

β-葡聚糖偶联超顺磁纳米氧化铁颗粒|紫杉醇-二十二碳六烯酸—右旋糖酐偶联物

β-葡聚糖偶联超顺磁纳米氧化铁颗粒 中文名称&#xff1a;β-葡聚糖偶联超顺磁纳米氧化铁颗粒 纯度&#xff1a;95% 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 外观:固体或粘性液体 包装&#xff1a;瓶装/袋装 溶解性&#xff1a;溶于大部分有机溶剂&am…