开发环境: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包
相关推荐
在给定的压缩包文件中,`java将图片转成Base64编码.htm`可能是包含上述示例代码的一个网页,而`java将图片转成Base64编码_files`可能是该网页的资源文件夹,可能包含了测试用的图片文件。 总之,Java中的Base64编码...
在IT行业中,将图片转换为Base64编码并存储到数据库是一种常见的做法,尤其是在Web开发中。这种方法可以避免处理图片的上传、存储和路径管理问题,简化系统架构。以下是关于这个主题的详细知识: 1. **Base64编码**...
Base64编码是一种编码方法,它将二进制数据转换为ASCII字符串格式。这种编码方式主要适用于编码那些无法直接通过文本格式传输的数据,比如图片、音频、视频等二进制文件。Base64编码通过把每3个字节的二进制数据转换...
"将图片进行Base64编码后传输"是一种高效且便捷的方式,它允许我们直接将图片数据嵌入到文本格式中,方便在网络中传递。这种技术广泛应用于JSON API、HTML页面以及任何不支持二进制数据流的系统。 Base64是一种编码...
二维码生成和图片Base64编码解码是两个在IT领域中常见的操作,广泛应用于数据传输、网页设计和移动应用等领域。下面将详细讲解这两个主题。 首先,二维码(Quick Response Code)是一种二维条形码,可以存储更多的...
这对于在网络上传输图像或在HTML中嵌入图像非常方便,只需将图片的Base64编码粘贴到HTML的`<img>`标签的`src`属性中即可。 4. **预览功能**:为了提高用户体验,尤其是处理透明图片时,软件背景设置为暗色,以确保...
在本示例中,我们讨论的是如何使用JavaScript对基于Base64编码的图片进行解码并显示在网页上。Base64是一种用于将二进制数据编码为ASCII字符串的编码方式,它在传输或存储非文本数据时非常有用,例如图片。 在HTML...
将图片转成Base64字符串。供前端Html <img/> 使用 将转换结果替换至src的值就OK了
在Android开发中,有时我们需要将图片转换为Base64编码的形式以便在网络传输或者存储时使用。Base64编码是一种常见的二进制数据转化为文本的方法,它通过使用64个可打印字符来表示原本的二进制数据,使得数据可以在...
总结来说,要在Thymeleaf中显示Base64字符串为图片,关键在于后台将图片字节数组转成Base64字符串并添加MIME类型标识,然后通过ModelAndView传递给前端;在前端,使用Thymeleaf表达式将字符串插入到`<img>`标签的`...
在这个"js base46转码、保存图片到本地、img显示本地图片.zip"的压缩包中,我们聚焦于JavaScript处理图像的一些核心功能,包括Base64编码、在页面上显示本地图片以及将图片保存到用户本地。下面,我们将深入探讨这些...
在IT领域,尤其是在Web开发和数据传输中,Base...总的来说,C++和OpenCV库为处理图片与Base64编码提供了强大支持,使开发者能够在各种场景下灵活地进行数据转换,例如在网络上传输图片数据或者在数据库中存储图片信息。
"图片在线转Base64编码 v1.0.rar" 是一个压缩包文件,其中包含的软件或工具主要用于将图片文件转换为Base64编码格式。Base64是一种用于在电子邮件和其他需要文本格式传输二进制数据的编码方式。在Web开发中,Base64...
综上所述,Python在将图片转换为Base64编码并实现前端显示方面有着简单直接的应用场景。这一技术可以使图片的传输和显示更为灵活,尤其适用于小尺寸图标或装饰性图片。通过这篇文章的学习,开发者可以更好地掌握在...
在实际应用中,可以通过读取图片文件并使用 Java 的 Base64 编码类库来实现动态编码,并将编码后的字符串插入到 HTML 中,以实现在网页上直接显示 Base64 编码的图片。 综上所述,Base64 编码在 Web 开发中有着广泛...
本文将深入探讨如何通过Base64编码实现图片的上传至服务器以及从服务器读取图片的过程。 Base64是一种用于在网络上传输二进制数据的编码方式,它将原始的二进制数据转换为ASCII字符,以便于在只支持文本的环境中...
在这个“获得图片Base64代码的程序Demo_base64_图片_”中,我们将探讨如何使用编程语言将图片文件转换成Base64编码,并保存到文档中。这个过程通常涉及到读取图片文件、编码二进制数据以及将结果写入文本文件。 1. ...
在本文中,我们将深入探讨如何使用Java实现在本地读取图片并将其存储到数据库中,之后再通过HTML页面显示这些图片。这个过程涉及到的主要技术包括Java编程、数据库操作(特别是MySQL)以及前后端交互。 首先,我们...
在IT领域,Base64是一种编码机制,用于将任意二进制数据转化为ASCII字符串,以便在电子邮件、HTML或XML等不支持二进制传输的环境中传递。VB(Visual Basic)是一种广泛使用的编程语言,尤其在处理Windows应用程序时...
通过创建一个`<canvas>`元素,我们可以将图片加载到Canvas中,然后使用`toDataURL()`方法获取其base64编码,再用`drawImage()`方法按比例缩小图片,最后再次调用`toDataURL()`获取压缩后的base64编码。 base64编码...