java 获取 html 图片路径_JAVA-替换html中图片的路径-从html代码中提取图片路径并下载(完整版)...
发布日期:2021-06-24 11:19:08 浏览次数:5 分类:技术文章

本文共 3833 字,大约阅读时间需要 12 分钟。

packagecom.googosoft.until;importjava.io.BufferedInputStream;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.net.HttpURLConnection;importjava.net.URL;importjava.util.ArrayList;importjava.util.Date;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.regex.Matcher;importjava.util.regex.Pattern;importjavax.servlet.http.HttpServletRequest;/***@authorsonyan

*@version2019年11月25日 下午2:12:32

* @desc*/

public classTest {/*** 将html中的图片下载到服务器,并且使用服务器上图片的地址替换图片的网络路径

*@paramhtml 要处理的html

*@paramrequest

*@paramuploadFolder 服务器上保存图片的目录

*@return

*/

public staticString transHtml(String html,HttpServletRequest request,String uploadFolder){

List imgList =getImgStrList(html,request);for(String imgStr : imgList) {try{

String newUrl=reSaveImage(imgStr, request,uploadFolder);

html=html.replace(imgStr, newUrl);

}catch(Exception e) {

e.printStackTrace();

}

}returnhtml;

}/*** 将指定的网络图片保存到本地指定目录

*@paramhttpUrl 图片原来的网络路径

*@paramrequest

*@paramuploadFolder 服务器上保存图片的目录

*@returnhttpUrl newPath*/

private staticString reSaveImage(String httpUrl, HttpServletRequest request,String uploadFolder){

FileOutputStream out= null;

BufferedInputStream in= null;

HttpURLConnection connection= null;

Map urlMap = new HashMap<>();byte[] buf = new byte[1024];int len = 0;try{

URL url= newURL(httpUrl);

connection=(HttpURLConnection) url.openConnection();

connection.connect();

in= newBufferedInputStream(connection.getInputStream());

urlMap=getNewPath(httpUrl, request,uploadFolder);

out= new FileOutputStream(urlMap.get("newPath").toString());while ((len = in.read(buf)) != -1) {

out.write(buf,0, len);

}

out.flush();

}catch(Exception e) {

e.printStackTrace();

}finally{try{

in.close();

out.close();

connection.disconnect();

}catch(IOException e) {

e.printStackTrace();

}

}return urlMap.get("newUrl").toString();

}/*** 获取保存在服务器上的图片的实际存储地址以及访问地址

*@paramhttpUrl 图片原来的网络路径

*@paramrequest

*@paramuploadFolder服务器上保存图片的目录

*@return

*/

private static MapgetNewPath(String httpUrl, HttpServletRequest request,String uploadFolder) {

Map relMap = new HashMap<>();

String fileName=getFileName();

String filefix= fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();//文件后缀

fileName = UuidUtil.get32UUID() + "." +filefix;

String prefix= getUrlPrefix(request) + "/iconimg/";

relMap.put("newUrl", prefix +fileName);

relMap.put("newPath", uploadFolder +fileName);returnrelMap;

}/*** 设置图片的名称(时间+用户编号)

*@return

*/

private staticString getFileName() {return "reload"+File.pathSeparator+new Date().getTime()+".jpg";

}/*** 提取HTML字符串中的img

*@paramhtmlStr 要处理的html字符串

*@return

*/

private static ListgetImgStrList(String htmlStr,HttpServletRequest request) {

List list = new ArrayList<>();

String img= "";

Pattern p_image;

Matcher m_image;

String regEx_img= "]*?>";

p_image=Pattern.compile(regEx_img, Pattern.CASE_INSENSITIVE);

m_image=p_image.matcher(htmlStr);while(m_image.find()) {

img=m_image.group();

Matcher m= Pattern.compile("src\\s*=\\s*\"?(.*?)(\"|>|\\s+)").matcher(img);while(m.find()) {

String path= m.group(1);if(!path.startsWith(getUrlPrefix(request))){

list.add(handleSrc(path));

}

}

}returnlist;

}/*** 去除src路径中的前后引号

*@paramsrc 图片的src路径

*@return

*/

private staticString handleSrc(String src) {if (src != null) {if (src.startsWith("'")|| src.startsWith("\"")) {return src.substring(1, src.length());

}if (src.endsWith("'")|| src.endsWith("\"")) {return src.substring(0, src.length());

}

}returnsrc;

}/*** 获取网站的URL

*@paramrequest

*@return例如:http://192.168.11.3:8089*/

public staticString getUrlPrefix(HttpServletRequest request) {

StringBuffer str= newStringBuffer();

str.append(request.getScheme());

str.append("://");

str.append(request.getServerName());if (80 !=request.getServerPort()) {

str.append(":" +request.getServerPort());

}

str.append(request.getContextPath());returnstr.toString();

}

}

转载地址:https://blog.csdn.net/weixin_32467421/article/details/114092753 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java redis 面试题_Java面试题(Redis篇)
下一篇:java 远程调试 端口_JAVA远程调试

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月07日 14时02分36秒