在互联网上采集数据做应用时,我们经常会遇到目标网站图片有防盗链,导致采集文章中的图片在应用中无法预览,通常解决这个问题有2个办法:

1、采集的时候将图片下载到自己的服务器上,然后将图片路径替换为自己的图片路径,缺点是存储资源太大(费用太高),采集慢;

2、不下载图片,在显示时做处理,由服务端来解决防盗链,我就是用的这种方式。

@GetMapping("/xb")
public void img(String url, HttpServletResponse response) {
try {
URL urls = new URL(url);
HttpURLConnection conn = (HttpURLConnection) urls.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(10 * 1000);
conn.setReadTimeout(10 * 1000);
InputStream inStream = conn.getInputStream();
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[2048];
int len = 0;
while ((len = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
inStream.close();
byte data[] = outStream.toByteArray();
response.setContentType("image/jpg");
OutputStream os = response.getOutputStream();
os.write(data);
os.flush();
os.close();
} catch (Exception e) {
e.printStackTrace();
}


}

 使用方法:url就是被防盗链的可访问地址,经过服务器转发返回图片流。

例如:​​https://www.ewbang.com/community/xb/?url=http://www.xiaobaixitong.com/d/file/jiaocheng/2022-11-16/d295a803f6b8e765b23864f8a460de01.png​