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

soゝso 2020-05-19 14:35:15 2532

七牛图片处理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

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

本文主题:

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

关于作者
一个低调而闷骚的男人。
相关文章
又拍(Upyun)CDN、存储刷新链接缓存,API实例讲解
Maven项目使用,以及注意事项。
Oracle与Mysql删除重复的数据,Oracle和Mysql数据去重复
Javascript 删除节点后是否需要将手动将事件解绑?
Java 集成阿里消息队列,日志消息存储
又拍(Upyun)刷新CDN,存储缓存 —JavaAPI
SOJSON 使用又拍 CDN 整体架构,解决百度 SEO 方案
Java 文字转图片输出,Java 输出透明背景图片,Java文字转图片防爬虫
N多系统单点登录,实现、解决方案。四种解决方案
Elasticsearch Date类型,时间存储相关说明。
最新文章
QUIC / HTTP3 协议详细分析讲解 1288
恭喜那个做云存储的七牛云完成 F 轮 10 亿人民币的融资,开启新的云旅程 1899
Autojs怎么安全加密?Autojs在线加密工具注意事项。 2831
Java JSON 组件选型之 FastJson 为什么总有漏洞? 8537
使用七牛云存储实现图片API,自动删除图片方案合集 2532
神速ICP备案经验分享,ICP备案居然一天就通过了 3912
百度加强推送URL链接,百度SEO强行推送链接JavaScript代码案例讲解。 4107
SOJSON 拓展服务器被DDos攻击了一晚上,是如何解决的? 4921
湖南地区备案“新增网站需提交组网方案或解释说明”,关于备案做简单叙述 5212
企查查你是个什么企业,骗子的帮凶,诈骗的集中营,通过企查查骚扰企业电话不断,为所欲为的企查查 12176
最热文章
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 466974
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 433627
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 364835
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 358866
免费天气API,天气JSON API,不限次数获取十五天的天气预报 322224
Elasticsearch教程(四) elasticsearch head 插件安装和使用 239489
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 203975
谈谈斐讯路由器劫持,你用斐讯路由器,你需要知道的事情 147604
Elasticsearch教程(一),全程直播(小白级别) 127798
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 105658

骚码加入我们 / 千人QQ群:259217951

入群需要5元为的是没有垃圾广告,如果没有QQ钱包,可以加群主拉进。

二维码生成 来自 >> 二维码生成器

支付扫码

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

查看我的收藏

正在加载... ...