如何实现 ctrl+v 粘贴图片
Posted on Wed, 25 Dec 2024 16:15:30 +0800 by LiangMingJian
思路
要实现按下 ctrl+v 粘贴图片,可以监听 paste 事件,从 clipboardData 下面获取复制的数据,然后进行图片生成,或者上传。
解决
监听 paste 事件,然后使用 getAsFile()
的方法获取 blob 文件对象。
document.addEventListener('paste', function (event) {
if (event.clipboardData || event.originalEvent) {
// 某些 chrome 版本使用的是 event.originalEvent
var clipboardData = (event.clipboardData || event.originalEvent.clipboardData);
if(clipboardData.items){
var items = clipboardData.items,
len = items.length,
blob = null;
for (var i = 0; i < len; i++) {
console.log(items[i]);
if (items[i].type.indexOf("image") !== -1) {
// getAsFile()
blob = items[i].getAsFile();
}
}
}
}
})
使用 blob 对象显示图片。
var blobUrl=URL.createObjectURL(blob);
document.getElementById("imgNode").src=blobUrl;
使用 base64 显示图片。
reader.onload = function (event) {
// event.target.result 即为图片的Base64编码字符串
var base64_str = event.target.result;
document.getElementById("imgNode").src=base64_str;
}
reader.readAsDataURL(blob);
生成 formData 上传图片。
var fd = new FormData();
fd.append("the_file", blob, 'image.png');