vue-html5-editor富文本编辑器抓取网络图片本地化

news/2024/9/24 11:16:09/

在vue中使用vue-html5-editor做的文章内容编辑器,至于怎么引用可另行百度,网络上有很多介绍;本文主要介绍如何在复制粘贴的时候跳过跨域限制和禁止外站的图片请求问题。

本文的方法比较笨拙,一起交流学习。

在研究使用vue-html5-editor的过程中,并没有发现对于复制粘贴过来图片的单独处理,倒是有一个insertImageUrl方法用来处理图片通过url粘贴过来的逻辑,不会重写该方法且该方法只针对通过图片功能上传的方式,因此放弃了。

后来实在没有办法了,决定在暴露出来的监听事件updateData方法中进行改造,思路如下:
1、监听文章内容变化,使用正则判断文章内容中是否有标签,并获取判断该标签中的src属性是否含有http或者https类型的图片链接;
2、提取出来图片的url链接;
3、调用后台接口,参数为url链接,通过后台接口访问图片链接并保存图片到自己的服务器,然后返回自己的服务器的图片url链接(这块我没有实现,我简单用base64做了测试);

前端代码:

async updateData(e = '') {var innerHTML = e.replace(/crossorigin="anonymous"/g,"");// 判断内容中是否有图片元素const imgRegex = /<img\s+[^>]*?src=(["'])(https?:\/\/[^\s'"]+)\1[^>]*>/g;var imageUrls = [];let match;while ((match = imgRegex.exec(innerHTML)) !== null) {// 要替换的url,调用后台接口,生成base64字符串var url = match[2];imageUrls.push(url);var result = await this.getHttpImgBase64(url);innerHTML = innerHTML.replace(url,result.data.ROOT.BODY.OUT_DATA);}this.content = innerHTML;},// 抓取网络图片,生成base64字符串getHttpImgBase64(url) {var data = new FormData();data.append('url',url);return getHttpImgBase64(data);},

其中return的getHttpImgBase64为调用后端接口的请求。

后端代码:

@ApiOperation(value = "抓取网络图片", notes = "用于适配编辑器,返回base64字符串")@PostMapping(value = "/getHttpImgBase64")public R<String> getHttpImgBase64(@RequestParam String url) {log.info("接收图片网络地址:" + url);String encodeToString = "";InputStream ins = null;try {URL imgURL = new URL(url);//转换URLHttpURLConnection urlConn = (HttpURLConnection) imgURL.openConnection();//构造连接urlConn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36");urlConn.connect();if (urlConn.getResponseCode() == 200) {//返回的状态码是200 表示成功ins = urlConn.getInputStream(); //获取输入流,从网站读取数据到 内存中ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();  byte[] buffer = new byte[1024];  int bytesRead;  // 读取InputStream中的数据到ByteArrayOutputStream  while ((bytesRead = ins.read(buffer)) != -1) {  byteArrayOutputStream.write(buffer, 0, bytesRead);  }  // 获取ByteArrayOutputStream中的数据到byte[]  byte[] fileInBytes = byteArrayOutputStream.toByteArray();  // 使用Base64编码byte[]为字符串  encodeToString = Base64.getEncoder().encodeToString(fileInBytes);/*** 1.Java使用BASE64Encoder 需要添加图片头("data:" + contentType + ";base64,"),*   其中contentType是文件的内容格式。* 2.Java中在使用BASE64Enconder().encode()会出现字符串换行问题,这是因为RFC 822中规定,*   每72个字符中加一个换行符号,这样会造成在使用base64字符串时出现问题,*   所以我们在使用时要先用replaceAll("[\\s*\t\n\r]", "")解决换行的问题。*/encodeToString = "data:" + urlConn.getContentType() + ";base64," + encodeToString;encodeToString = encodeToString.replaceAll("[\\s*\t\n\r]", "");}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {  // 关闭InputStream  if (ins != null) {  try {  ins.close();  } catch (IOException e) {  e.printStackTrace();  }  }  }  return R.ok(encodeToString);}

本人基础知识不太扎实,如果有哪里需要优化的可以在评论区一起交流,另外欢迎补充返回url的代码。


http://www.ppmy.cn/news/1452920.html

相关文章

43 单例模式

目录 1.什么是单例模式 2.什么是设计模式 3.特点 4.饿汉和懒汉 5.峨汉实现单例 6.懒汉实现单例 7.懒汉实现单例&#xff08;线程安全&#xff09; 8.STL容器是否线程安全 9.智能指针是否线程安全 10.其他常见的锁 11.读者写者问题 1. 什么是单例模式 单例模式是一种经典的&a…

9.2.k8s的控制器资源(rs控制器replicasets)

目录 一、replicaset副本控制器 二、rs控制器资源的管理 1.基于标签-创建rs资源 2.基于标签表达式创建rs资源 三、rs资源的升级和回滚 一、replicaset副本控制器 replicaset副本控制器&#xff0c;简称&#xff1a;rs控制器&#xff1b; 用法&#xff1a;与rc控…

远程服务器 docker XRDP 桌面访问 记录

需求描述: 我现在在远程连接 一台服务器&#xff0c;由于需要实验环境需要GUI 和 桌面系统&#xff0c;但是又想在 docker 中运行。因此&#xff0c;我现在首先需要通过 ssh 连接服务器&#xff0c;然后再服务器中连接 docker. REF: https://github.com/danielguerra69/ubuntu-…

mac nvm install node<version> error 404

mac m2芯片遇到的问题&#xff0c;估计m系列的应该也有这个问题&#xff0c;在这里记录一下 解决方案&#xff1a; ## 需要先处理一下兼容就OK了arch -x86_64 zsh nvm install returns curl: (22) The requested URL returned error: 404 Issue #2667 nvm-sh/nvm GitHub

SSH远程登录实操实验!

ssh远程登录协议&#xff1a;默认端口号22 以下实验7-2是服务端&#xff0c;7-1是客户端 服务器的相关信息&#xff1a; 服务名称&#xff1a;sshd 服务端主程序&#xff1a;/usr/sbin/sshd 服务端配置文件&#xff1a;/etc/ssh/sshd_config 客户端相关信息&#xff1a; …

银行ETL-监管报送

1104报表 1104报表主要包括&#xff1a;资产负债&#xff0c;表外业务、流动性风险、贷款质量、投向行业和地区、重点客户等。 1104报表分类 普通报表、机构特色类报表。 反洗钱 大额交易、可疑交易。标签分类&#xff1a;疑似犯罪、疑似毒品、疑似传销。 反洗钱—接口报…

贪吃蛇(上)Win32API

感谢大佬的光临各位&#xff0c;希望和大家一起进步&#xff0c;望得到你的三连&#xff0c;互三支持&#xff0c;一起进步 个人主页&#xff1a;LaNzikinh-CSDN博客 文章目录 前言一、Win32 API二、地图的绘制和初始化总结 前言 贪吃蛇&#xff08;也叫做贪食蛇&#xff09;游…

【计算机网络】因特网概述

一.发展的三个阶段 二.ISP介绍 因特网服务提供者&#xff08;Internet Service Provider&#xff09;&#xff0c;简称ISP&#xff0c;普通用户是通过 ISP 接入到因特网的&#xff0c;ISP 可以从因特网管理机构申请到成块的 IP 地址&#xff0c;同时拥有通信线路以及路由器等连…