wangEditor上传的图片按回退键删除不能删除服务器文件的问题

项目中要使用富文本编辑,经过一轮筛选最终选择了国人开源的wangEditor(相对其他的富文本更简单,上手快文档也比较齐全)。使用的过程中发现一个问题,本地上传的图片如果按回退键删除了,服务器上还是存在。多余的话不多说,下面直接上代码。
1.使用正则表达式提取标签中的src

public static List<String> getImgUrl(String htmlStr) {
		List<String> pics = new ArrayList<>();
		if (org.apache.commons.lang3.StringUtils.isEmpty(htmlStr)) {
			return pics;
		}
		String img = "";
		Pattern p_image;
		Matcher m_image;
		//     String regEx_img = "<img.*src=(.*?)[^>]*?>"; //图片链接地址
		String regEx_img = "<img.*src\\s*=\\s*(.*?)[^>]*?>";
		p_image = Pattern.compile
				(regEx_img, Pattern.CASE_INSENSITIVE);
		m_image = p_image.matcher(htmlStr);
		while (m_image.find()) {
			// 得到<img />数据
			img = m_image.group();
			// 匹配<img>中的src数据
			Matcher m = Pattern.compile("src\\s*=\\s*\"?(.*?)(\"|>|\\s+)").matcher(img);
			while (m.find()) {
				pics.add(m.group(1));
			}
		}
		return pics;
	}

2.从图片地址中提取图片ID,找出不存在的图片ID并删除

List<String> imageURLList=RegExpUtils.getImgUrl(content);
		List<String> newImageIdList=new ArrayList<>();
		String [] imageDomains=imageDomain.split(",");
		if (imageURLList != null && !imageURLList.isEmpty()) {
			imageURLList.stream().forEach(imageUrl->{
				// 如果自己服务器上的图片
				if (imageDomains.length>1) {
					if (imageUrl.indexOf(imageDomains[0])!=-1 || imageUrl.indexOf(imageDomains[1])!=-1) {
						String str[] = imageUrl.split("/");
						newImageIdList.add(str[str.length - 2]);
					}
				}else if (imageDomains.length==1) {
					if (imageUrl.indexOf(imageDomains[0])!=-1) {
						String str[] = imageUrl.split("/");
						newImageIdList.add(str[str.length - 2]);
					}
				}
			});
		}
		List<String> unexists=new ArrayList<>();
		// 找出不存在的图片ID
		for (int i=0;i<images.size();i++) {
			if (!newImageIdList.contains(images.get(i))) {
				unexists.add(images.get(i));
			}
		}
		message.setImages(newImageIdList);
		unexists.stream().forEach(imageId->{
			// 删除图片
			imageService.deleteImageByImageID(imageId);
		});
发布了78 篇原创文章 · 获赞 20 · 访问量 43万+

猜你喜欢

转载自blog.csdn.net/tangyajun_168/article/details/102959231