解决思路:在本地展示使用本地的src,发送到微信的时候使用微信的src.要实现功能,先需要做一些工作.
1.在富文本框中上传图片的时候,使用本地图片地址插入到img标签中,并且将微信的src保存到data-src.
2.在提交到后台的时候,使用Jsoup将src中的内容替换为wxImg-src.
/** * 将htmlBody中所有img标签中的src内容替换为原data-src的内容, * 如果不报含data-src,则src的内容不会被替换 * 例如: * 替换前 <img data-src="weixinImgUrl" src="localImgUrl" othreAttr="其他属性不变"/> * 替换后 <img src="weixinImgUrl" othreAttr="其他属性不变" /> * @param htmlBody html内容 * @return 返回替换后的内容 * @author Leon Tan */ public static String replaceImgSrcFromDataSrc(String htmlBody) { Document document = Jsoup.parseBodyFragment(htmlBody); Elements nodes = document.select("img"); int nodeLenth = nodes.size(); for (int i = 0; i < nodeLenth; i++) { Element e = nodes.get(i); String dataSrc = e.attr("data-src"); if (StringUtils.isNotBlank(dataSrc)){ System.out.println(dataSrc); e.attr("src", dataSrc); e.removeAttr("data-src"); } } if (htmlBody.contains("")){ return document.toString(); }else{ return document.select("body>*").toString(); } } // 测试代码 public static void main(String[] args) { String context = "" + ""; System.out.println(replaceImgSrcFromDataSrc(context)); }123123123123" + " " + " " + " " + "asdfasdfasdf
3.将最终返回的结果另存到一个新的字段中,这样在本地显示的时候,就获取原字段内容,发送给微信的时候就取新字段内容.
输出
123123123123asdfasdfasdf
///
无关说明
本来第一时间想到的是使用正则表达式来做,但是做出来之后感觉很大局限性.
//通过正则表达式将img标签中的src内容替换为data-src中的内容
/** * 通过正则表达式将img标签中的src内容替换为data-src中的内容 * @param context 要替换的内容 * @return * @author Leon Tan */ public static String replaceImgSrcFromDataSrc(String context){ Pattern p = Pattern.compile("((data-src|src)\\s*=(\"|\')[0-9a-zA-Z:/\\.\\?\\s_\\-=&]*(\"|\'))", Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(context); StringBuffer sb = new StringBuffer(context); String temp = null; int replaceIndex = 0; while (m.find()) { String find = m.group(); if (find.indexOf("data-src") > -1){ temp = find; }else{ if (temp != null){ replaceIndex = sb.indexOf(find, replaceIndex); sb.replace(replaceIndex, replaceIndex+find.length(), "src"+temp.substring(8)); } } } return sb.toString(); }
本文地址: