博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 获取 html 图片路径_JAVA-替换html中图片的路径-从html代码中提取图片路径并下载(完整版)...
阅读量:1532 次
发布时间:2019-04-21

本文共 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();

}

}

转载地址:http://dvkdy.baihongyu.com/

你可能感兴趣的文章
Alibaba Cloud Toolkit——简介
查看>>
Android——浙理体育(飞翔的红蜻蜓)反编译分析
查看>>
JAVA——GZIP压缩与解压缩
查看>>
PTA——编译错误[error: redefinition of ‘main’]解决方案
查看>>
CTF Geek Challenge——第十一届极客大挑战Web Write Up
查看>>
CTF Geek Challenge——第十一届极客大挑战Crypto Write Up
查看>>
CTF Geek Challenge——第十一届极客大挑战Pwm Write Up
查看>>
CTF Geek Challenge——第十一届极客大挑战Misc Write Up
查看>>
《服务外包概论》实验报告——版本管理与控制工具的综合应用
查看>>
Spring Boot 内置Tomcat——IntelliJ IDEA中配置模块目录设为文档根目录(DocumentRoot)解决方案
查看>>
Spring Boot 内置Tomcat——getServletContext().getRealPath()为临时目录问题解决方案
查看>>
Spring Boot 内置Tomcat——集成JSP解决方案
查看>>
Spring Boot 内置Tomcat——集成PHP解决方案
查看>>
MIUI——添加学校邮箱到电子邮件解决方案
查看>>
Vue + Spring Boot——axios使用GET以参数的方式传递对象到SpringMVC解决方案
查看>>
《编译原理》实验预习报告——递归下降语法分析器的构建
查看>>
《编译原理》实验报告——递归下降语法分析器的构建
查看>>
设计模式——装饰者(Decorator)模式DEMO——游戏角色的装饰者模式实现
查看>>
设计模式——装饰者(Decorator)模式DEMO——成绩汇报的装饰者模式实现
查看>>
《软件工程》实验报告——软件设计
查看>>