SpringBoot整合Zimg实现图片管理

实现背景

起初时常挂在嘴边要实现一下springboot和Zimg的整合,时隔半个学期才突然想起来还有这回事。趁着最近比较闲,翻了几篇博客,想着一定要实现一下。


参考博客

利用开源图片服务器 zimg搭建属于自己的服务器 sb实现接口上传图片到图片服务器


环境

Tip: 如果没有事先搭建Zimg,可以见图片服务器搭建初体验

JDK 1.8
SpringBoot 2.2.1
Docker
Zimg


图片上传

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public CommonResult uploadImgsToZimg(MultipartFile file) {
if(file.isEmpty()) {
return CommonResult.failed("文件不为空");
}
String filename=file.getOriginalFilename();
// 文件类型
String prefix=filename.substring(filename.lastIndexOf(".")+1);
OutputStream outStream = null;
BufferedReader in = null;
String result = "";
JSONObject jsonResult = null;
try {
URL realUrl = new URL(ZIMG_URL + "upload");
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("Content-Type", prefix);
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
//二进制
outStream = conn.getOutputStream();
outStream.write(file.getBytes());
outStream.flush();

// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
jsonResult = JSONObject.parseObject(result);
} catch (Exception e) {
CommonResult.failed("发送 POST 请求出现异常!" + e);
} finally { //使用finally块来关闭输出流、输入流
try{
if (outStream != null) {
outStream.close();
}
if (in != null) {
in.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return CommonResult.success(jsonResult);
}

图片删除

  这里需要注意的是,可能因为权限问题图片无法删除成功,这里见图片服务器搭建初体验

1
2
3
4
5
6
7
8
9
10
@Override
public CommonResult delImages(String md5) {
String result = restTemplate.getForObject(ZIMG_URL + "admin?md5=" + md5 +"&t=1", String.class);
if(result.contains("Admin Command Successful")) {
return CommonResult.success("删除成功");
} else {
return CommonResult.failed("删除失败");
}

}

Tip:这里仅有新增和删除的实现,结合数据库可以添加查询和更新的操作,实现基本图片管理,这里不再一一纂述,附上图片数据表,仅供参考。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DROP TABLE IF EXISTS `SysImage`;
CREATE TABLE `SysImage` (
`id` bigint(0) NOT NULL COMMENT 'ID',
`create_id` bigint(0) NOT NULL DEFAULT 0 COMMENT '创建人ID',
`update_id` bigint(0) NOT NULL DEFAULT 0 COMMENT '更新人ID',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NOT NULL DEFAULT '' COMMENT '图片名',
`size` bigint(0) NOT NULL DEFAULT 0 COMMENT '图片大小\r\n',
`location` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NOT NULL DEFAULT '' COMMENT '图片路径',
`md5` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NOT NULL DEFAULT '' COMMENT 'md5',
`descrption` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '描述',
`create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '创建时间',
`update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
`is_del` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除 0->未删除,1->删除',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_croatian_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;
如果你觉得有帮助,慷慨如你,可以扫描下面的二维码赞赏一下