首先理解清理垃圾文件的原理
在填写表单信息时上传图片后就已经存入云中,但是此时取消表单的填写这个图片就变成垃圾图片,所以在点击新建填写表单的方法/upload中,把上传的图片名字存入Redis的value中,key(key1)值可以任意。然后在提交表单的方法中把成功提交表单的图片存入到value中,key(key2)与上面不同。
利用Redis的差集sdiff就可以得到上传的垃圾图片的名字,再利用云的处理垃圾图片的方法就可以清除。
示例代码如下:
添加依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>7.2.0</version>
</dependency>
配置application.yml
spring:
redis:
host: 127.0.0.1
port: 6379
jedis:
pool:
max-idle: 6 #最大空闲数
max-active: 10 #最大连接数
min-idle: 2
配置Jedis
@Configuration
public class JedisConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.jedis.pool.max-active}")
private int maxActive;
@Value("${spring.redis.jedis.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.jedis.pool.min-idle}")
private int minIdle;
@Bean
public JedisPoolConfig jedisPoolConfig(){
//创建一个配置对象
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(maxActive);
poolConfig.setMaxIdle(maxIdle);
poolConfig.setMinIdle(minIdle);
return poolConfig;
}
@Bean
public JedisPool jedisPool(JedisPoolConfig PoolConfig){
//创建连接池对象
return new JedisPool(PoolConfig,host,port);
}
}
在/upload方法中
//upload:SETMEAL_PIC_REAOURCE 1 2 3
jedisPool.getResource().sadd(RedisConstant.SETMEAL_PIC_RESOURCES,imgName);
在add方法中
//add:SETMEAL_PIC_DB_REAOURCE 1 2
jedisPool.getResource().sadd(RedisConstant.SETMEAL_PIC_DB_RESOURCES,setmeal.getImg());
注意两个代码都要放在上传成功代码之后!!!!!!
在CleanImgJob方法中
筛选出垃圾图片
@Component
public class CleamImgJob {
@Autowired
private JedisPool jedisPool;
public void cleanImg(){
Jedis jedis = jedisPool.getResource();
//jedis.sdiff(SETMEAL_PIC_REAOURCE, SETMEAL_PIC_DB_REAOURCE);--->3
Set<String> imgNameSet = jedis.sdiff(RedisConstant.SETMEAL_PIC_RESOURCES,RedisConstant.SETMEAL_PIC_DB_RESOURCES);
//QiniuUtil.deletePic(3);
for (String imgNmae : imgNameSet) {
QiniuUtils.deleteFileFromQiniu(imgNmae);
//jedis.srem(SETMEAL_PIC_REAOURCE, 3);//防止重复删除
jedis.srem(RedisConstant.SETMEAL_PIC_RESOURCES,imgNmae);
System.out.println(new Date() + "-------->定时清理垃圾图片:" + imgNmae);
}
}
最后在QuartzConfig配置类中