java远程下载图片_java远程下载图片

该博客介绍了如何使用Java从远程网站下载图片,并将图片替换为本地服务器的地址。通过解析HTML,提取图片URL,然后下载并保存到本地,最后更新文章内容中的图片源地址。
摘要由CSDN通过智能技术生成

从别的网站复制文章的时候,要把图片下载到我们网站,再把图片地址换成我们网站的地址

图片

console.log("haha");var src =document.getElementById(name).srcif(src.indexOf("rcwimg")<=0) return;

document.getElementById(name).src=cb;

}

public class WaNewsInfoVo extends Page{privateInteger id;privateString title;privateInteger typeId;privateString typeName;privateInteger typeId2;privateString typeName2;privateString logo;privateString content;privateString createTime;privateString createUser;privateString createUserName;privateString tag1;privateString tag2;privateInteger isDisplay;privateInteger browser;privateString summary;

}

// 编码

private static final String ECODING = "UTF-8";

// 获取img标签正则

  private static final String IMGURL_REG = "]*?>";

// 获取src路径的正则

private static final String IMGSRC_REG = "(http|https):\"?(.*?)(\"|>|\\s+)";

//添加或者修改资讯

public int insertOrUpdate(HttpServletRequest request, WaNewsInfoVo vo){

String aaa = "/attached/image/";

String path = request.getSession().getServletContext().getRealPath("../")+ "/attached/image/";

//获取图片标签

List imgUrl = getImageUrl(vo.getContent());

//获取图片src地址

List imgSrc = getImageSrc(imgUrl);

//下载图片

Download(imgSrc,path);

String test = replaceHtmlTag(vo.getContent(),"img","src","src=\""+aaa,"\"");

vo.setContent(test);

if(CommUtil.isEmpty(vo.getId())){

vo.setBrowser(0);

return waNewsDao.insert(vo);

}

return waNewsDao.update(vo);

}

/***

* 获取ImageUrl地址

*

*@paramHTML

*@return

*/

private ListgetImageUrl(String HTML) {

Matcher matcher=Pattern.compile(IMGURL_REG).matcher(HTML);

List listImgUrl = new ArrayList();while(matcher.find()) {

listImgUrl.add(matcher.group());

}returnlistImgUrl;

}/***

* 获取HTML内容

*

*@paramurl

*@return*@throwsException*/

private String getHTML(String url) throwsException {

URL uri= newURL(url);

URLConnection connection=uri.openConnection();

InputStream in=connection.getInputStream();byte[] buf = new byte[1024];int length = 0;

StringBuffer sb= newStringBuffer();while ((length = in.read(buf, 0, buf.length)) > 0) {

sb.append(newString(buf, ECODING));

}

in.close();returnsb.toString();

}/***

* 获取ImageSrc地址

*

*@paramlistImageUrl

*@return

*/

private List getImageSrc(ListlistImageUrl) {

List listImgSrc = new ArrayList();for(String image : listImageUrl) {

Matcher matcher=Pattern.compile(IMGSRC_REG).matcher(image);while(matcher.find()) {

listImgSrc.add(matcher.group().substring(0, matcher.group().length() - 1));

}

}returnlistImgSrc;

}/***

* 下载图片

*

*@paramlistImgSrc*/

private void Download(ListlistImgSrc, String path) {try{for(String url : listImgSrc) {if(url.indexOf("http")>=0){

String imageName= url.substring(url.lastIndexOf("/") + 1, url.length());

URL uri= newURL(url);

InputStream in=uri.openStream();

FileOutputStream fo= new FileOutputStream(newFile(path,imageName));byte[] buf = new byte[1024];int length = 0;

System.out.println("开始下载:" +url);while ((length = in.read(buf, 0, buf.length)) != -1) {

fo.write(buf,0, length);

}

in.close();

fo.close();

System.out.println(path+imageName + "下载完成");

}

}

}catch(Exception e) {

System.out.println("下载失败");

}

}

替换img标签

/*** 替换指定标签的属性和值

*@paramstr 需要处理的字符串

*@paramtag 标签名称

*@paramtagAttrib 要替换的标签属性值

*@paramstartTag 新标签开始标记

*@paramendTag 新标签结束标记

*@return*@authorhuweijun

* @date 2016年7月13日 下午7:15:32*/

public staticString replaceHtmlTag(String str, String tag, String tagAttrib, String startTag, String endTag) {//匹配以结尾

String regxpForTag = "]*)\\s*";//匹配src="开头,"结尾

String regxpForTagAttrib = tagAttrib + "=\\s*\"([^\"]+)\"";//编译后的正则表达式

Pattern patternForTag =Pattern.compile (regxpForTag,Pattern. CASE_INSENSITIVE );

Pattern patternForAttrib=Pattern.compile (regxpForTagAttrib,Pattern. CASE_INSENSITIVE );//先查

Matcher matcherForTag =patternForTag.matcher(str);

StringBuffer sb= newStringBuffer();//如果有结果

boolean result =matcherForTag.find();while(result) {

StringBuffer sbreplace= new StringBuffer( "

Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag.group(1));if(matcherForAttrib.find()) {

String attributeStr= matcherForAttrib.group(1);

String imageName= attributeStr.substring(attributeStr.lastIndexOf("/") + 1, attributeStr.length());

sbreplace.append("id=‘"+imageName+"‘ alt=‘图片‘ οnerrοr=\"NextPic(‘/attached/image/"+imageName+"‘,‘"+imageName+"‘);\"");

matcherForAttrib.appendReplacement(sbreplace, startTag+ "rcwimg" +endTag);

}

matcherForAttrib.appendTail(sbreplace);

matcherForTag.appendReplacement(sb, sbreplace.toString());

result=matcherForTag.find();

}

matcherForTag.appendTail(sb);returnsb.toString();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值