1、引入网络图片下载工具类
package com.ctcemti.machinery.common.util;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* @ClassName: HttpImgUtils
* @Description: 网络图片下载工具
* @Author: Bob
* @Date: 2023/1/12 10:51
* @Version: 1.0
*/
public class HttpImgUtils {
/**
* 获取网络图片转成字节流
* @param strUrl 完整图片地址
* @return 图片资源数组
*/
public static byte[] getNetImgByUrl(String strUrl) {
try {
URL url = new URL(strUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(2 * 1000);
// 通过输入流获取图片数据
InputStream inStream = conn.getInputStream();
// 得到图片的二进制数据
byte[] btImg = readInputStream(inStream);
return btImg;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 从输入流中获取字节流数据
* @param inStream 输入流
* @return 图片流
*/
private static byte[] readInputStream(InputStream inStream) throws Exception {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
// 设置每次读取缓存区大小
byte[] buffer = new byte[1024*10];
int len = 0;
while ((len = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
inStream.close();
return outStream.toByteArray();
}
}
2、在实体类中加入字段
@Excel(name = "附件", type = 2, width = 15,imageType = 2)
private byte[] imgFile;
3、在集合中插入图片
@Override
public void export(HttpServletRequest request, HttpServletResponse response) {
List<DmCarInfo> allList = dmCarInfoMapper.selectDmCarInfoList(exportDmCarInfo);//用于导出数据
allList.forEach(item -> {
try {
item.setImgFile(HttpImgUtils.getNetImgByUrl("http://192.168.2.24:13001//attachment/getImage?path=20221021/47be819d-8957-474d-9e84-0fa914f87ab4-101636550.png"));
} catch (Exception e) {
log.error("导出文件_图片资源获取失败 url = "+item.getImgFile());
}
});
if (allList != null && allList.size() > 0) {
// 导出数据
ExcelUtil.exportExcel(allList, "中交一航局在用车辆信息统计表", "汇总表",
DmCarInfo.class, "中交一航局在用车辆信息统计表导出.xls", response);
}
}