`
max1487
  • 浏览: 103373 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

JAVA解析html文档,替换img图片路径成base64编码,并将文章存入数据库

    博客分类:
  • java
阅读更多

开发环境:struts2+ spring + hibernate

数据库:oracle

需求:在HTML编辑器中输入文章,传入后台,文章中所有图片路径,转换成base64编码,将文章存入数据库中的CLOB字段。

知识点:HTML编辑器,html解析,base64编码,String到CLOB类型转换

 

        一般情况下,数据库只需要保存图片的路径就可以了,图片文件放在项目文件夹中,显示时只需加载图片路径即可。但是时下信息共享的渠道太多了 ,当IOS,android,微信公众号都操作同一个数据库的时候,上述方案是无法加载到图片的。因此我想到一个办法就是上传图片后,将路径替换为base64编码,存入数据库即可。

       我使用的编辑器是kindeditor,演示内容:

 



 备注:kindeditor上传图片的功能会和struts2会有冲突,因为struts2过滤jsp时会改变request类型,解决方法链接http://blog.csdn.net/kunkun378263/article/details/23274369

 

文章内容传到后台后,调用HTML解析类的编码方法 ,并用hibernate的createClob方法将String 转成CLOB,添加到数据库。

Action方法:

public String add(){
		String content = request.getParameter("content");
		Clob clob =Hibernate.createClob(HtmlJsoup.html_ImgToBase64(content));
		article.setContent(clob);
		service.add(article);

                return SUCCESS;
	}

 

我使用的HTML解析器是jsoup,类名和方法名都是和javaScript相类似的,对于会jquery的同学简直是福音,非常好理解非常好用,下面是我自己写的HTML解析类的代码,在转码前还会调用一个使用了正则表达式的方法用于检测路径是否为有效路径。

import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.struts2.ServletActionContext;
import org.jsoup.Jsoup;
import org.jsoup.nodes.*;
import org.jsoup.select.Elements;

public class HtmlJsoup {

	/**
	 * 检测图片路径是否为真实有效的路径方法
	 * @param src
	 * @return
	 */
	public static boolean checkImage(String src){

		
		//使用正则表达式,排除img标签src属性值已经是base64编码的情况
		Pattern pattern = Pattern.compile("^data:image/(png|gif|jpg|jpeg|bmp|tif|psd|ICO);base64,.*");
		Matcher matcher = pattern.matcher(src);
		if(matcher.matches())
			return false;
		//排除src路径并非图片格式的情况
		pattern=Pattern.compile("^.*[.](png|gif|jpg|jpeg|bmp|tif|psd|ICO)$");
		matcher = pattern.matcher(src);
		if(!matcher.matches())
			return false;
		//排除图片路径不存在的情况
		String path = ServletActionContext.getServletContext().getRealPath(src.substring(5, src.length()));
		File file = new File(path);
		if(!file.exists())
			return false;
	
		return true;
	}
	public static String html_ImgToBase64(String html){
		Document doc = Jsoup.parse(html, "utf-8");
		Elements imgs = doc.getElementsByTag("img");
		
		for(Element img :imgs){
			String src = img.attr("src");
			
			if(!checkImage(src))
				continue;
			//将有效的路径传入base64编码的方法
			img.attr("src",ImageBase64.imageToBase64Head(src));
			
		}
		
		//返回base64编码后的html文档
		return doc.getElementsByTag("body").html();
	}
}

 

最后是图片转base64的编码类代码,记得要带上头文件,不然显示时无法识别。

import java.io.*;
import org.apache.commons.codec.binary.Base64;
import org.apache.struts2.ServletActionContext;


public class ImageBase64 {
	 
	 /**
      * 将图片转换成Base64编码 ,带头文件
      * @param imgFile 待处理图片
      * @return
      */
     public static String imageToBase64Head(String imgFile){
         //将图片文件转化为字节数组字符串,并对其进行Base64编码处理
    	 String type = imgFile.substring(imgFile.length()-3,imgFile.length());
    	 //为编码添加头文件字符串
         String head = "data:image/"+type+";base64,";
        
         return head + imageToBase64(imgFile);
     }
     /**
      * 将图片转换成Base64编码
      * @param imgFile 待处理图片
      * @return
      */
     public static String imageToBase64(String imgFile){
         //将图片文件转化为字节数组字符串,并对其进行Base64编码处理
    	 
    	 //拿到上传图片后,图片所在的项目中真实路径
    	 String path = ServletActionContext.getServletContext().getRealPath(imgFile.substring(5, imgFile.length()));
 	
        InputStream in = null;
         byte[] data = null;
         
         try 
         {
        	//读取图片字节数组
             in = new FileInputStream(path);        
             data = new byte[in.available()];
             in.read(data);
             in.close();
         } 
         catch (IOException e) 
         {
             e.printStackTrace();
         }
         
         return new String(Base64.encodeBase64(data));
     }
     
     
}

 

存入到CLOB字段后,就是这样了



  



 

 最后是一些使用到的jar包

  • 大小: 27 KB
  • 大小: 79.9 KB
0
0
分享到:
评论

相关推荐

    java将图片转成Base64编码

    在给定的压缩包文件中,`java将图片转成Base64编码.htm`可能是包含上述示例代码的一个网页,而`java将图片转成Base64编码_files`可能是该网页的资源文件夹,可能包含了测试用的图片文件。 总之,Java中的Base64编码...

    图片转base64保存到数据库 , 并回显到浏览器

    在IT行业中,将图片转换为Base64编码并存储到数据库是一种常见的做法,尤其是在Web开发中。这种方法可以避免处理图片的上传、存储和路径管理问题,简化系统架构。以下是关于这个主题的详细知识: 1. **Base64编码**...

    js 显示base64编码的二进制流网页图片

    Base64编码是一种编码方法,它将二进制数据转换为ASCII字符串格式。这种编码方式主要适用于编码那些无法直接通过文本格式传输的数据,比如图片、音频、视频等二进制文件。Base64编码通过把每3个字节的二进制数据转换...

    将图片进行Base64编码后传输

    "将图片进行Base64编码后传输"是一种高效且便捷的方式,它允许我们直接将图片数据嵌入到文本格式中,方便在网络中传递。这种技术广泛应用于JSON API、HTML页面以及任何不支持二进制数据流的系统。 Base64是一种编码...

    二维码生成 图片Base64编码解码

    二维码生成和图片Base64编码解码是两个在IT领域中常见的操作,广泛应用于数据传输、网页设计和移动应用等领域。下面将详细讲解这两个主题。 首先,二维码(Quick Response Code)是一种二维条形码,可以存储更多的...

    Base64文件图片编码解码双向转换解析预览工具

    这对于在网络上传输图像或在HTML中嵌入图像非常方便,只需将图片的Base64编码粘贴到HTML的`<img>`标签的`src`属性中即可。 4. **预览功能**:为了提高用户体验,尤其是处理透明图片时,软件背景设置为暗色,以确保...

    js对图片base64编码字符串进行解码并输出图像示例

    在本示例中,我们讨论的是如何使用JavaScript对基于Base64编码的图片进行解码并显示在网页上。Base64是一种用于将二进制数据编码为ASCII字符串的编码方式,它在传输或存储非文本数据时非常有用,例如图片。 在HTML...

    图片转成Base64字符串,供<img/>使用

    将图片转成Base64字符串。供前端Html &lt;img/&gt; 使用 将转换结果替换至src的值就OK了

    Android图片的Base64编码与解码及解码Base64图片方法

    在Android开发中,有时我们需要将图片转换为Base64编码的形式以便在网络传输或者存储时使用。Base64编码是一种常见的二进制数据转化为文本的方法,它通过使用64个可打印字符来表示原本的二进制数据,使得数据可以在...

    Thymeleaf显示base64字符串为图片.docx

    总结来说,要在Thymeleaf中显示Base64字符串为图片,关键在于后台将图片字节数组转成Base64字符串并添加MIME类型标识,然后通过ModelAndView传递给前端;在前端,使用Thymeleaf表达式将字符串插入到`&lt;img&gt;`标签的`...

    js base46转码、保存图片到本地、img显示本地图片.zip

    在这个"js base46转码、保存图片到本地、img显示本地图片.zip"的压缩包中,我们聚焦于JavaScript处理图像的一些核心功能,包括Base64编码、在页面上显示本地图片以及将图片保存到用户本地。下面,我们将深入探讨这些...

    c++图片与base64互转

    在IT领域,尤其是在Web开发和数据传输中,Base...总的来说,C++和OpenCV库为处理图片与Base64编码提供了强大支持,使开发者能够在各种场景下灵活地进行数据转换,例如在网络上传输图片数据或者在数据库中存储图片信息。

    图片在线转Base64编码 v1.0.rar

    "图片在线转Base64编码 v1.0.rar" 是一个压缩包文件,其中包含的软件或工具主要用于将图片文件转换为Base64编码格式。Base64是一种用于在电子邮件和其他需要文本格式传输二进制数据的编码方式。在Web开发中,Base64...

    python将图片转base64,实现前端显示

    综上所述,Python在将图片转换为Base64编码并实现前端显示方面有着简单直接的应用场景。这一技术可以使图片的传输和显示更为灵活,尤其适用于小尺寸图标或装饰性图片。通过这篇文章的学习,开发者可以更好地掌握在...

    JSP severlet 动态 base64 编码 图片 显示处理

    在实际应用中,可以通过读取图片文件并使用 Java 的 Base64 编码类库来实现动态编码,并将编码后的字符串插入到 HTML 中,以实现在网页上直接显示 Base64 编码的图片。 综上所述,Base64 编码在 Web 开发中有着广泛...

    通过base64上传图片到服务器并读取图片

    本文将深入探讨如何通过Base64编码实现图片的上传至服务器以及从服务器读取图片的过程。 Base64是一种用于在网络上传输二进制数据的编码方式,它将原始的二进制数据转换为ASCII字符,以便于在只支持文本的环境中...

    获得图片Base64代码的程序Demo_base64_图片_

    在这个“获得图片Base64代码的程序Demo_base64_图片_”中,我们将探讨如何使用编程语言将图片文件转换成Base64编码,并保存到文档中。这个过程通常涉及到读取图片文件、编码二进制数据以及将结果写入文本文件。 1. ...

    java实现本地读取图片存储到数据库中并在html网页显示

    在本文中,我们将深入探讨如何使用Java实现在本地读取图片并将其存储到数据库中,之后再通过HTML页面显示这些图片。这个过程涉及到的主要技术包括Java编程、数据库操作(特别是MySQL)以及前后端交互。 首先,我们...

    VB 将二进制图片文件转换为Base64字符串文本

    在IT领域,Base64是一种编码机制,用于将任意二进制数据转化为ASCII字符串,以便在电子邮件、HTML或XML等不支持二进制传输的环境中传递。VB(Visual Basic)是一种广泛使用的编程语言,尤其在处理Windows应用程序时...

    HTML5HTML5 选图 压缩 base64编码 上传 解码

    通过创建一个`&lt;canvas&gt;`元素,我们可以将图片加载到Canvas中,然后使用`toDataURL()`方法获取其base64编码,再用`drawImage()`方法按比例缩小图片,最后再次调用`toDataURL()`获取压缩后的base64编码。 base64编码...

Global site tag (gtag.js) - Google Analytics