原文地址:开发者导航 · 你想要的,我全都有!
七牛云自带的检索功能很不友好,比如我网站定时备份的数据,在七牛云空间内查询根本查不到。如果要在几千个文件内一页页翻,找到想要的东西可能要疯掉。
所以我打算做两件事:
1、获取七牛云OSS对象存储指定空间内的文件列表名称,找到符合条件的文件 2、下载该文件
第一步:新建springboot项目,引入jar包,其中hutool-all是工具类,用来写文件下载,可以随意更换。
<!--工具类--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.2.0</version> </dependency> <!--七牛云相关jar包--> <dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version>[7.2.0, 7.2.99]</version> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.14.2</version> <scope>compile</scope> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.5</version> <scope>compile</scope> </dependency> <dependency> <groupId>com.qiniu</groupId> <artifactId>happy-dns-java</artifactId> <version>0.1.6</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>
第二步:登录七牛云,在秘钥管理中找到accessKey和secretKey
第三步:写测试类,代码结构如下:
package com.provy.jiagou.qiniu;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.model.FileInfo;
import com.qiniu.util.Auth;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
/**
* 1、获取七牛云OSS对象存储指定空间内的文件列表名称
* 2、下载文件
* 官方API说明:https://developer.qiniu.com/kodo/sdk/1239/java#1
* 开发者导航 codernav.com
*/
public class QiNiu {
//七牛云秘钥AK
static String accessKey = "WON91h7OjG2uPWepa6BEIgjAGoRdtjc-JO-";
//七牛云秘钥SK
static String secretKey = "gj6KdkCd-3Kxnp2SyH_HKXi6-gX08CYvAH";
//加速域名
static String domainOfBucket = "cdn.jiagou1216.com";
//七牛云空间名称
static String bucket = "jiagou1216";
//保存路径
static String path = "d://七牛云//jiagou1216";
public static void main(String[] args) {
list();
}
/**
* 列表
*/
public static void list() {
//构造一个带指定Zone对象的配置类
Configuration cfg = new Configuration(Region.region0());
//...其他参数参考类注释
Auth auth = Auth.create(accessKey, secretKey);
BucketManager bucketManager = new BucketManager(auth, cfg);
//文件名前缀
String prefix = "";
//每次迭代的长度限制,最大1000,推荐值 1000
int limit = 10;
//指定目录分隔符,列出所有公共前缀(模拟列出目录效果)。缺省值为空字符串
String delimiter = "";
//列举空间文件列表
BucketManager.FileListIterator fileListIterator = bucketManager.createFileListIterator(bucket, prefix, limit, delimiter);
while (fileListIterator.hasNext()) {
//处理获取的file list结果
FileInfo[] items = fileListIterator.next();
for (FileInfo item : items) {
//打印以"Web_www.jiagou1216.com_"和"Db_empirecms_"开头的文件的名称
if (StrUtil.startWithAny(item.key, "Web_www.jiagou1216.com_", "Db_empirecms_")) {
System.out.println(item.key);
download(item.key);//下载
}
}
}
}
/**
* 下载
*/
public static void download(String fileName) {
String encodedFileName = null;
try {
encodedFileName = URLEncoder.encode(fileName, "utf-8").replace("+", "%20");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String publicUrl = String.format("%s/%s", domainOfBucket, encodedFileName);
Auth auth = Auth.create(accessKey, secretKey);
long expireInSeconds = 3600;//1小时,可以自定义链接过期时间
String finalUrl = auth.privateDownloadUrl(publicUrl, expireInSeconds);
System.out.println(finalUrl);
HttpUtil.downloadFile(finalUrl, FileUtil.file(path));//下载
}
}