使用七牛云存储实现图片API,自动删除图片方案合集

JSON 2020-05-19 14:35:15 4088

七牛图片处理API使用背景

本站有几个工具是采用  七牛云  存储图片API实现的。主要为图片周边,如:图片格式转换、图片压缩、图片信息读取等API。


图片尺寸修改:https://www.sojson.com/image/change.html

图片格式转换:https://www.sojson.com/image/format.html

图片批量压缩:https://www.sojson.com/image/compress.html

图片信息查看:https://www.sojson.com/image/info.html

等等... ...

但是遭到有人恶意使用我们的工具,先上传图片,然后获取图片地址,然后就直接拿着我们的图片去做使用,导致我们  七牛云  存储的  CDN  流量异常的高,而且是居高不下。

本来可以用防盗链 + 不允许空的来源链接来解决,但是对我们工具来讲会有一些影响,所以没办法,只好想一些办法来解决。

解决方案

可能很多人了解的话,知道七牛有一个生命周期,我也已经设置了1天,但是生命周期只能以天为单位,也就是用户上传了文件,在不主动干预的情况下,基本上会存储到24小时左右。


1.七牛云存储本身有比较完善的API,可以对文件有一个防盗链的API。具体可以看看这个链接:https://developer.qiniu.com/fusion/kb/1670/timestamp-hotlinking-prevention

2.使用后删除,当用户上传后,做系列操作,最后有一个完成操作的场景下,这时候可以调用删除文件API,来删除文件。

3.主动去读取七牛云存储空间,然后去根据时间删除。

我采纳的方案,由于方案1稍微有点复杂,方案2对我不合适,我采用了方案3,主动去读取列表,然后判断时间是否超过一定的时间,再删除。

解决代码 4 Java

这里采用Java解决的,稍微示例一下代码:

1.定时任务,6分钟扫描一次,根据自己的业务做具体时间设置。

//采用一个定时任务,6分钟执行一次
@Scheduled(cron = "0 */6 * * * ?")
public void sysDeleteQiniuFile(){
    DeleteManager.getByPrifix("空间名称","",100);
}

2.获取列表文件,读取上传时间比较后删除

import com.qiniu.common.QiniuException;
import com.qiniu.common.Zone;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.model.FileInfo;
import com.qiniu.util.Auth;
import com.sojson.domain.html.common.DateUtil;
import lombok.extern.slf4j.Slf4j;

import java.util.Date;

@Slf4j
public class DeleteManager {
    static Auth auth = Auth.create( accessKey,  secretKey);

	/**
	 * 根据前缀删除
	 * @param bucket  空间
	 * @param prefix 前缀
	 * @param limit  多少条    每次迭代的长度限制,最大1000,推荐值 1000
	 * @return
	 */
	public static void getByPrifix(String bucket, String prefix, int limit) {

        //构造一个带指定 Region 对象的配置类
        Configuration cfg = new Configuration(Zone.zone0());

        BucketManager bucketManager = new BucketManager(auth, cfg);
        //指定目录分隔符,列出所有公共前缀(模拟列出目录效果)。缺省值为空字符串
        String delimiter = "";
        //列举空间文件列表
        BucketManager.FileListIterator fileListIterator = bucketManager.createFileListIterator(bucket, prefix, limit, delimiter);
        while (fileListIterator.hasNext()) {
            //处理获取的file list结果
            FileInfo[] items = fileListIterator.next();
            for (FileInfo item : items) {
                String key = item.key;
                long putTime = item.putTime / 10000;

                Date now  = new Date();

                long stime = now.getTime() - putTime;

                long min = stime / 1000 / 60;


                log.info("上传时间:{},现在时间:{}",DateUtil.dateToString(new Date(putTime),"yyyy-MM-dd HH:mm") ,DateUtil.dateToString(now,"yyyy-MM-dd HH:mm") );

                //计算时间相差五分钟就删除
                if(min > 5){
                    log.info("相差5分钟,开始删除:{}",key );

                    try {
                        Response res = bucketManager.delete(bucket, key);

                        log.info("删除文件:[{}]:{}",  res.statusCode,key);
                    } catch (QiniuException e) {
                        log.info("删除失败:{}",key);
                    }
                }
            }
        }
	}
}

这里要注意2个问题。

1.accessKey,  secretKey这个您登录七牛账号,鼠标移动到头像,有一个秘钥管理中可以取到,链接为:https://portal.qiniu.com/user/key

2.Zone.zone0() 问题,您要搞清楚您的空间在哪个区域,也可以直接 Zone.autoZone() 。

详细请看七牛java sdk :https://developer.qiniu.com/kodo/sdk/1239/java

结言

给你们看看处理后的效果图就懂了,这些人在我提供了免费工具的情况下,还投机取巧的撸我的资源,确实有点无耻。

存储量直线下降:


API调用下降明显:


这里API调用下降有延迟要解释下,API调用居高不下主要是有人直接拿了我的图片地址做使用,比如直接微信群推广,转二维码等等。没有及时下降是因为  CDN  是全国式节点,有缓存的情况。



版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/367.html

转载时必须以链接形式注明原始出处及本声明。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
一个低调而闷骚的男人。
相关文章
最新文章
当我谈 HTTP 时,我谈些什么? 4069
新浪短链(t.cn)最新申请官方API的方法讲解。 22089
QUIC / HTTP3 协议详细分析讲解 2580
恭喜那个做云存储的七牛云完成 F 轮 10 亿人民币的融资,开启新的云旅程 3721
Autojs怎么安全加密?Autojs在线加密工具注意事项。 8965
Java JSON 组件选型之 FastJson 为什么总有漏洞? 24343
使用七牛云存储实现图片API,自动删除图片方案合集 4088
神速ICP备案经验分享,ICP备案居然一天就通过了 5262
百度加强推送URL链接,百度SEO强行推送链接JavaScript代码案例讲解。 5103
SOJSON 拓展服务器被DDos攻击了一晚上,是如何解决的? 6865
最热文章
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 509638
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 446180
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 417845
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 389108
Elasticsearch教程(四) elasticsearch head 插件安装和使用 273210
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 245862
谈谈斐讯路由器劫持,你用斐讯路由器,你需要知道的事情 161469
Elasticsearch教程(一),全程直播(小白级别) 138573
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 131579
Elasticsearch教程(五) elasticsearch Mapping的创建 108961
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...