生活随笔
收集整理的這篇文章主要介紹了
JAVA解析html文档,替换img图片路径成base64编码,并将文章存入数据库
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
轉(zhuǎn)載自??JAVA解析html文檔,替換img圖片路徑成base64編碼,并將文章存入數(shù)據(jù)庫
開發(fā)環(huán)境:struts2+ spring + hibernate
數(shù)據(jù)庫:oracle
需求:在HTML編輯器中輸入文章,傳入后臺(tái),文章中所有圖片路徑,轉(zhuǎn)換成base64編碼,將文章存入數(shù)據(jù)庫中的CLOB字段。
知識(shí)點(diǎn):HTML編輯器,html解析,base64編碼,String到CLOB類型轉(zhuǎn)換
?
? ? ? ? 一般情況下,數(shù)據(jù)庫只需要保存圖片的路徑就可以了,圖片文件放在項(xiàng)目文件夾中,顯示時(shí)只需加載圖片路徑即可。但是時(shí)下信息共享的渠道太多了 ,當(dāng)IOS,android,微信公眾號(hào)都操作同一個(gè)數(shù)據(jù)庫的時(shí)候,上述方案是無法加載到圖片的。因此我想到一個(gè)辦法就是上傳圖片后,將路徑替換為base64編碼,存入數(shù)據(jù)庫即可。
? ? ? ?我使用的編輯器是kindeditor,演示內(nèi)容:
?
?備注:kindeditor上傳圖片的功能會(huì)和struts2會(huì)有沖突,因?yàn)閟truts2過濾jsp時(shí)會(huì)改變r(jià)equest類型,解決方法鏈接http://blog.csdn.net/kunkun378263/article/details/23274369
?
文章內(nèi)容傳到后臺(tái)后,調(diào)用HTML解析類的編碼方法 ,并用hibernate的createClob方法將String 轉(zhuǎn)成CLOB,添加到數(shù)據(jù)庫。
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相類似的,對(duì)于會(huì)jquery的同學(xué)簡直是福音,非常好理解非常好用,下面是我自己寫的HTML解析類的代碼,在轉(zhuǎn)碼前還會(huì)調(diào)用一個(gè)使用了正則表達(dá)式的方法用于檢測路徑是否為有效路徑。
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?{??????????????????public?static?boolean?checkImage(String?src){????????????????????????????????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;????????????????????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;????????????????????????????img.attr("src",ImageBase64.imageToBase64Head(src));????????????????????????}??????????????????????????????return?doc.getElementsByTag("body").html();??????}??}??
?
最后是圖片轉(zhuǎn)base64的編碼類代碼,記得要帶上頭文件,不然顯示時(shí)無法識(shí)別。
import?java.io.*;??import?org.apache.commons.codec.binary.Base64;??import?org.apache.struts2.ServletActionContext;??????public?class?ImageBase64?{?????????????????????????public?static?String?imageToBase64Head(String?imgFile){??????????????????????String?type?=?imgFile.substring(imgFile.length()-3,imgFile.length());??????????????????????String?head?=?"data:image/"+type+";base64,";?????????????????????return?head?+?imageToBase64(imgFile);???????}??????????????????public?static?String?imageToBase64(String?imgFile){????????????????????????????????????????????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字段后,就是這樣了
??
總結(jié)
以上是生活随笔為你收集整理的JAVA解析html文档,替换img图片路径成base64编码,并将文章存入数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。