有时候需要将网络图片保存至数据库 查询时再展示图片信息
1、将图片上传本地 并将上传本地地址赋给 表
/*
* urlStr :图片原地址链接
*path :本地图片地址
* filename:图片名称
* */
public static void loadImgAngin(String urlStr,String path,String filename) throws BusinessException {
FileOutputStream outStream=null;
try {
URL url = new URL(urlStr);
//打开链接
File imageFile = new File(path+"/"+filename);
if (!imageFile.getParentFile().exists()) {
imageFile.getParentFile().mkdirs();
}
Thumbnails.of(url).size(400,500).toFile(imageFile);
}catch (Exception e){
e.printStackTrace();
throw new BusinessException(e.getMessage());
}finally {
try {
if(outStream!=null){
outStream.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
}
2、上传本地后 展示
//更改图片地址类型
//listMap可以存放多个图片链接
List<Map<String, String>> listMap = new ArrayList<>();
String base64Str = ImgConfig.ImageToBase64(url);
base64Str = base64Str.replaceAll("\n", "").replaceAll("\r", "");
Map<String, String> map = new HashMap<>();
map.put("url", "data:image/jpg;base64," + base64Str);
listMap.add(map);
//ImgConfig.ImageToBase64()方法
public static String ImageToBase64(String imgPath) {
byte[] data = null;
// 读取图片字节数组
try {
InputStream in = new FileInputStream(imgPath);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
// 对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder();
// 返回Base64编码过的字节数组字符串
return encoder.encode(Objects.requireNonNull(data));
}