Java代码下载(IDEA)
Maven引入
写在application.properties配置文件中
upload.path=G:/imgs
getUrl=https://mp.weixin.qq.com/s/fdllA87IDpUZ34OFBVZdWw
wexinUrl=https://mp.weixin.qq.com
定义Controller
@RestController
@RequestMapping("/crawler")
publicclassCrawlerController{
//存储图片的路径,写在配置文件里面
@Value("${upload.path}")
privateStringpath;
//公众号文章地址,写在配置文件里面
@Value("${getUrl}")
privateStringurl;
//公众号总地址
@Value("${wexinUrl}")
privateStringwexinUrl;
@RequestMapping("/getContent")
publicStringgetContent(){
Stringcontent=null;
StringimgDir=path;
// 输入网址,创建发起Get请求的对象
HttpGethttpGet=newHttpGet(url);
// 创建httpClient对象,类似于打开浏览器
CloseableHttpClienthttpClient=HttpClients.createDefault();
// 类似于浏览器输入网址后,按回车
CloseableHttpResponseexecute=null;
try{
execute=httpClient.execute(httpGet);
// 解析获取数据,判断状态码是不是200
if(execute.getStatusLine().getStatusCode()==200){
HttpEntityentity=execute.getEntity();
content=EntityUtils.toString(entity,"utf8");
Documentdoc=Jsoup.parse(content);
//找到图片标签
Elementsimg=doc.select("img");
for(inti=0;i // 图片地址 StringimgUrl=img.get(i).attr("data-src"); Filesf=newFile(imgDir); if(!sf.exists()){ sf.mkdirs(); } // 这里是一个公众号的二维码的图片,先不处理了 // String id = img.get(i).attr("id"); // if ("js_pc_qr_code_img".equalsIgnoreCase(id)) { // imgUrl = wexinUrl + img.get(i).attr("src"); // } if(imgUrl!=null&&!imgUrl.equals("")){ StringfileName=DateTimeUitls.getString("yyyyMMddHHmmssSS")+".png"; StringimgPath=imgDir+File.separator+fileName; FileimgFile=newFile(imgPath); if(!imgFile.exists()){ // 下载图片 // 构造URL URLurl=newURL(imgUrl); // 打开连接 URLConnectioncon=url.openConnection(); //设置请求超时为5s con.setConnectTimeout(5*1000); // 输入流 InputStreamin=con.getInputStream(); // 1K的数据缓冲 byte[]bs=newbyte[1024]; // 读取到的数据长度 intlen; // 输出的文件流 OutputStreamos=newFileOutputStream(imgPath); // 开始读取 while((len=in.read(bs))!=-1){ os.write(bs,0,len); } os.close(); in.close(); } //重新赋值为本地路径, // img.get(i).attr("data-src", imgPath); // img.get(i).attr("src", imgPath); //上面访问图片可能访问不到,建议定义访问图片的请求方法,所以修改成下面的的路径访问方式 img.get(i).attr("data-src","/crawler/readImg/"+fileName); img.get(i).attr("src","/crawler/readImg/"+fileName); //导出 html content=doc.outerHtml(); } } } }catch(Exceptione){ e.printStackTrace(); }finally{ try{ execute.close(); }catch(IOExceptione){ e.printStackTrace(); } try{ httpClient.close(); }catch(IOExceptione){ e.printStackTrace(); } } returncontent; } //建议定义访问图片的请求方法 @RequestMapping("/readImg/{fileName}") publicvoidreadImg(@PathVariable("fileName")StringfileName,HttpServletResponseresponse){ try{ // fileImage 为服务器存储的实际路径 如 c:\aa\bb.jpg StringfileImage=path+File.separator+fileName; FileInputStreamhFile=newFileInputStream(fileImage);// 以byte流的方式打开文件 inti=hFile.available();// 得到文件大小 bytedata[]=newbyte[i]; hFile.read(data);// 读数据 hFile.close(); response.setContentType("image/*");// 设置返回的文件类型 OutputStreamtoClient=response.getOutputStream();// 得到向客户端输出二进制数据的对象 toClient.write(data);// 输出数据 toClient.close(); }catch(IOExceptione){ // 错误处理 PrintWritertoClient; try{ // 得到向客户端输出文本的对象 toClient=response.getWriter(); response.setContentType("text/html;charset=utf8"); toClient.write("无法打开图片!"); toClient.close(); }catch(IOExceptione1){ e1.printStackTrace(); } } } } 时间格式工具类 public class DateTimeUitls { public static String getString(String pattern){ SimpleDateFormat df = new SimpleDateFormat(pattern); return df.format(new Date()); } }