文档章节

如何实现自动缓存文章的图片?

harries
 harries
发布于 2016/07/08 17:30
字数 821
阅读 41
收藏 2

前沿:我相信大家多多少少应该发过一些文章,或者写过一些博客。对于文章的图片各个平台是如何处理的呢。如:QQ空间会把所有文章的图片缓存到qq服务器上。那么如何实现这一功能呢?大家有没有思考过?

QQ图片20160708172547

好!下面我们带着问题来思考这个问题“如何实现自动缓存文章的图片?” 首先,自动就必须无人工去干预,必须程序自动检测文章是否包含图片。其次,缓存图片那就必须下载图片,下载图片如何防止爬虫!带着这个思路我们把整理称如下步骤

1.程序定时跑任务,如每30秒扫面一下文章里面是否又需要替换的图片(非本站图片)

2.解析文章里面的图片url(需要用到正则或者html解析工具,如jsoup)

3.自动下载到本地服务器上(需要网络连接相关工具包,对于某些网站,可能需要用过代理)

4.替换原文章里面的url(正则替换或者字符串替换)

1.程序定时跑任务

<bean id="downloadImageTime" class="org.springframework.scheduling.quartz.CronTriggerBean">
 <property name="jobDetail" ref="downloadImageCron" />
 <property name="cronExpression" value="0/30 * * * * ?" /> 
 </bean>

2.解析文章里面的图片url

public void addImageUrl(Document doc,BsArticle bsarticle ){
 Elements elements = doc.select("div.article_body").select("img");
 for(Element element:elements){
 String imageUrl =element.attr("src");
 BsReplaceimage bsReplaceimage = new BsReplaceimage();
 bsReplaceimage.setOldImageurl(processsImage(imageUrl));
 bsReplaceimage.setProcessFlag(0);
 bsReplaceimage.setArticleId(bsarticle.getId());
 try {
 replaceImageService.addReplaceImage(bsReplaceimage);
 } catch (Exception e) {
 e.printStackTrace();
 }
 }
 }

3.自动下载到本地服务器上

/**
* 下载图片
* 把从服务器获得图片的输入流InputStream写到本地磁盘
* @Method_Name : downImage
* @param urlString
* @param filename
* @param savePath
* @return : void
* @Creation Date : 2016年7月8日 上午11:06:25
* @version : v1.00
* @Author : liuhaihua
* @Update Date :
* @Update Author :
*/
public static String downImage(String oldurlString, String filename,String savePath) {
String newurlString ="";
InputStream inputStream = getInputStream(oldurlString);
byte[] data = new byte[1024];
int len = 0;
FileOutputStream fileOutputStream = null;
try {
String absolute_path ="/alidata1/ftp"+savePath;
File sf=new File(absolute_path);
if(!sf.exists()){
sf.mkdirs();
}
newurlString =savePath+"/"+filename+"."+parseSuffix(oldurlString);
fileOutputStream = new FileOutputStream(sf.getPath()+"/"+filename+"."+parseSuffix(oldurlString));

while ((len = inputStream.read(data)) != -1) {
fileOutputStream.write(data, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fileOutputStream != null) {
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return newurlString;
}

/**
* 从服务器获得一个输入流(本例是指从服务器获得一个image输入流)
* @Method_Name : getInputStream
* @param URL_PATH
* @return
* @return : InputStream
* @Creation Date : 2016年7月8日 上午11:07:00
* @version : v1.00
* @Author : liuhaihua
* @Update Date :
* @Update Author :
*/
public static InputStream getInputStream(String URL_PATH) {
InputStream inputStream = null;
HttpURLConnection httpURLConnection = null;
try {
URL url = new URL(URL_PATH);
httpURLConnection = (HttpURLConnection) url.openConnection(proxy);
// 设置网络连接超时时间
httpURLConnection.setConnectTimeout(3000);
// 设置应用程序要从网络连接读取数据
httpURLConnection.setDoInput(true);
httpURLConnection.setRequestMethod("GET");
int responseCode = httpURLConnection.getResponseCode();
if (responseCode == 200) {
// 从服务器返回一个输入流
inputStream = httpURLConnection.getInputStream();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return inputStream;
}

4.替换原文章里面的url

System.out.println("oldurl--------------------:"+oldurl);
System.out.println("newurl--------------------:"+newurl);
String newcontent = content.replace(oldurl, newurl);

PS:如果您想和业内技术大牛交流的话,请加qq群(521249302)或者关注微信公众 号(AskHarries),谢谢!

© 著作权归作者所有

共有 人打赏支持
harries
粉丝 46
博文 101
码字总数 88148
作品 4
朝阳
其他
私信 提问
腾讯技术分享:Android版手机QQ的缓存监控与优化实践

本文内容整理自公众号腾讯Bugly,感谢原作者的分享。 1、问题背景 对于Android应用来说,内存向来是比较重要的性能指标。内存占用过高,会影响应用的流畅度,甚至引发OOM,非常影响用户体验。...

JackJiang2011
04/08
0
0
Android图片加载框架最全解析(三),深入探究Glide的缓存机制

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/54895665 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每天都有文章更新。 在本...

sinyu890807
2017/05/23
0
0
【Google官方教程】第四课:在UI中显示Bitmap

转载声明:Ryan的博客文章欢迎您的转载,但在转载的同时,请注明文章的来源出处,不胜感激! :-) http://my.oschina.net/ryanhoo/blog/88484 译者:Ryan Hoo 来源:https://developer.andro...

RyanHoo
2012/11/11
0
3
Android图片加载框架最全解析(八),带你全面了解Glide 4的用法

转载请注明出处:http://blog.csdn.net/guolinblog/article/details/78582548 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每天都有文章更新。 本篇将...

sinyu890807
2017/12/19
0
0
iOS开发-你真的会用SDWebImage?

iOS开发-你真的会用SDWebImage? SDWebImage作为目前最受欢迎的图片下载第三方框架,使用率很高。但是你真的会用吗?本文接下来将通过例子分析如何合理使用SDWebImage。 使用场景:自定义的U...

法斗斗
2016/06/01
84
0

没有更多内容

加载失败,请刷新页面

加载更多

撬动世界的支点——《引爆点》读书笔记2900字优秀范文

撬动世界的支点——《引爆点》读书笔记2900字优秀范文: 作者:挽弓如月。因为加入火种协会的读书活动,最近我连续阅读了两本论述流行的大作,格拉德威尔的《引爆点》和乔纳伯杰的《疯传》。...

原创小博客
18分钟前
0
0
《配电网自动化技术》第一章

写了配电网的组成、历程、难点、存在问题、解决方案,还是蛮好的。尤其是各地建设的系统后续又无法实用化,以及多种终端反而增加了运维工作量等,都是目前切实存在的让大家不停吐槽的内容。

max佩恩
23分钟前
0
0

中国龙-扬科
41分钟前
2
0
使用vuex的state状态对象的5种方式

vuex是一个专门为vue.js设计的状态管理模式,并且也可以使用devtools进行调试。 下面给大家来贴一下我的vuex的结构 下面是store文件夹下的state.js和index.js内容 //state.jsconst state =...

peakedness丶
44分钟前
2
0
NetCore MVC Demo

地址:http://114.116.9.72:5411

whltian
52分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部