package com.javaweb.cms.util; import cn.hutool.cache.Cache; import cn.hutool.cache.CacheUtil; import com.javaweb.common.config.Global; import com.javaweb.common.utils.DateUtils; import com.javaweb.common.utils.StringUtils; import com.javaweb.common.utils.file.FileUploadUtils; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; public class DownloadImageUtil { static Logger logger = LoggerFactory.getLogger(DownloadImageUtil.class); static Cache downloadCache = CacheUtil.newLRUCache(1000); public static void main(String[] args) { System.out.println(downloadImageToLocal("http://old.duoguyu.com/uploads/201809/09/180909053041227.jpg","/test/test2")); } /** * 检测一个网络路径文件是否存在 * @param url * @return */ public static boolean checkNetUrlExists(String url){ try{ URL u = new URL(url); HttpURLConnection urlcon = (HttpURLConnection) u.openConnection(); if(urlcon.getResponseCode()==200){ return true; } }catch (Exception ex){ } return false; } /** * 本地化网络路径图片 * @param urlPath 网络图片 * @param appendPath 追加一层目录如/book或/article * @return 返回保存到本地的相对路径 */ public static String downloadImageToLocal(String urlPath,String appendPath){ try{ if(!checkNetUrlExists(urlPath)){ return ""; } String saveBathPath=Global.getUploadPath(); if(StringUtils.isNotEmpty(appendPath)){ appendPath=appendPath.startsWith("/")?appendPath:"/"+appendPath; saveBathPath+=appendPath; } CloseableHttpClient httpclient = HttpClients.createDefault(); //这里通过httpclient下载之前抓取到的图片网址,并放在对应的文件中 //String urlPath="http://v3cdn.duoguyu.com/oss/uploads/201803/08/180308100445561.jpg"; HttpGet httpget = new HttpGet(urlPath); String extension=com.google.common.io.Files.getFileExtension(urlPath); String name=com.google.common.io.Files.getNameWithoutExtension(urlPath); String fileName = DateUtils.datePath() + "/" + FileUploadUtils.encodingFilename(name) + "." + extension; File file = FileUploadUtils.getAbsoluteFile(saveBathPath,fileName); HttpResponse response = httpclient.execute(httpget); HttpEntity entity = response.getEntity(); InputStream in = entity.getContent(); try { FileOutputStream fout = new FileOutputStream(file); int l = -1; byte[] tmp = new byte[1024]; while ((l = in.read(tmp)) != -1) { fout.write(tmp,0,l); } fout.flush(); fout.close(); } finally { in.close(); } return FileUploadUtils.getPathFileName(saveBathPath,fileName); }catch (Exception ex){ ex.printStackTrace(); return "error"; } } }