本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!