七牛云资源上传、删除、分页、批量操作工具类


package cn.ming.utils;

import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.BatchStatus;
import com.qiniu.storage.model.FileListing;
import com.qiniu.util.Auth;

import java.io.InputStream;

/**
 * @description: 七牛工具类
 * @author: Mr.Fang
 * @create: 2022-05-01 09:15
 */
public class QiNiuUtils {

    // key 控制台查看
    private static String accessKey = "你的key"; // key
    // secret 秘钥
    private static String secretKey = "你的secret"; // 秘钥
    // 空间
    private static String bucket = "你的空间";

    /**
     * 地区:
     * 华东    Region.region0(), Region.huadong()
     * 华北    Region.region1(), Region.huabei()
     * 华南    Region.region2(), Region.huanan()
     * 北美    Region.regionNa0(), Region.beimei()
     * 东南亚    Region.regionAs0(), Region.xinjiapo()
     */
    //构造一个带指定 Region 对象的配置类
    private static Configuration cfg = new Configuration(Region.region2());
    private static String upToken = "";
    private static Auth auth = null;

    static {
        auth = Auth.create(accessKey, secretKey);
        upToken = auth.uploadToken(bucket);
    }

    /**
     * create by: Mr.Fang
     * description: 本地上传文件
     * create time: 2022/5/1 9:22
     *
     * @return java.lang.String 返回 JSON 字符串响应结果:[{"hash":"FsTuB-z8xNrghfYYF8HD8z4RsG5b","key":"FsTuB-z8xNrghfYYF8HD8z4RsG5b"}]
     * @Param: localFilePath 文件路径
     * @Param: key 默认不指定key的情况下,以文件内容的hash值作为文件名
     */
    public static String upload(String localFilePath, String key) {
        UploadManager uploadManager = new UploadManager(cfg);
        Response response = null;
        try {
            response = uploadManager.put(localFilePath, key, upToken);
            String bodyString = response.bodyString();  // 响应结果
            printResult(response);
            return bodyString;
        } catch (QiniuException ex) {
            Response r = ex.response;
            System.err.println(r.toString());
            try {
                System.err.println(r.bodyString());
            } catch (QiniuException ex2) {
                ex2.printStackTrace();
            }
        }
        return null;
    }

    /**
     * create by: Mr.Fang
     * description: 字节数组上传
     * create time: 2022/5/1 9:22
     *
     * @return java.lang.String 返回 JSON 字符串响应结果:[{"hash":"FsTuB-z8xNrghfYYF8HD8z4RsG5b","key":"FsTuB-z8xNrghfYYF8HD8z4RsG5b"}]
     * @Param: bytes 字节数组
     * @Param: key 默认不指定 key 的情况下,以文件内容的 hash 值作为文件名
     */
    public static String upload(byte[] bytes, String key) {
        UploadManager uploadManager = new UploadManager(cfg);
        Response response = null;
        try {
            response = uploadManager.put(bytes, key, upToken);
            String bodyString = response.bodyString();  // 响应结果
            printResult(response);
            return bodyString;
        } catch (QiniuException ex) {
            Response r = ex.response;
            System.err.println(r.toString());
            try {
                System.err.println(r.bodyString());
            } catch (QiniuException ex2) {
                ex2.printStackTrace();
            }
        }
        return null;
    }

    /**
     * create by: Mr.Fang
     * description: 字节数组上传
     * create time: 2022/5/1 9:22
     *
     * @return java.lang.String 返回 JSON 字符串响应结果:[{"hash":"FsTuB-z8xNrghfYYF8HD8z4RsG5b","key":"FsTuB-z8xNrghfYYF8HD8z4RsG5b"}]
     * @Param: is 输入流
     * @Param: key 默认不指定 key 的情况下,以文件内容的 hash 值作为文件名
     */
    public static String upload(InputStream is, String key) {
        UploadManager uploadManager = new UploadManager(cfg);
        Response response = null;
        try {
            response = uploadManager.put(is, key, upToken, null, null);
            String bodyString = response.bodyString();  // 响应结果
            printResult(response);
            return bodyString;
        } catch (QiniuException ex) {
            Response r = ex.response;
            System.err.println(r.toString());
            try {
                System.err.println(r.bodyString());
            } catch (QiniuException ex2) {
                ex2.printStackTrace();
            }
        }
        return null;
    }


    /**
     * create by: Mr.Fang
     * description: 删除服务器文件
     * create time: 2022/5/1 9:39
     *
     * @return int 返回状态码 200 就 ok
     * @Param: key 七牛的key
     */
    public static int delete(String key) {
        BucketManager bucketManager = new BucketManager(auth, cfg);
        try {
            bucketManager.delete(bucket, key);
            Response response = bucketManager.bucketsResponse();
            int statusCode = response.statusCode; // 状态码
            printResult(response);
            return statusCode;
        } catch (QiniuException ex) {
            System.err.println(ex.response.toString());
        }
        return 0;
    }

    /**
     * create by: Mr.Fang
     * description: 删除服务器文件,指定过期时间,以天为单位
     * create time: 2022/5/1 9:45
     *
     * @return int 返回状态码 200 就 ok
     * @Param: key 七牛的key
     * @Param: days 啥时候删除
     */
    public static int delete(String key, int days) {
        BucketManager bucketManager = new BucketManager(auth, cfg);
        try {
            bucketManager.deleteAfterDays(bucket, key, days);
            Response response = bucketManager.bucketsResponse();
            int statusCode = response.statusCode; // 状态码
            printResult(response);
            return statusCode;
        } catch (QiniuException ex) {
            ex.printStackTrace();
            System.err.println(ex.response.toString());
        }
        return 0;
    }

    /**
     * create by: Mr.Fang
     * description: 批量删除
     * create time: 2022/5/1 15:42
     *
     * @return int
     * @Param: keys 多个 key
     */
    public static BatchStatus[] batchDelete(String... keys) {
        BucketManager bucketManager = new BucketManager(auth, cfg);
        BucketManager.BatchOperations batchOperations = new BucketManager.BatchOperations();
        batchOperations.addDeleteOp(bucket, keys);
        try {
            Response response = bucketManager.batch(batchOperations);
            BatchStatus[] batchStatusList = response.jsonToObject(BatchStatus[].class);
            return batchStatusList;
        } catch (QiniuException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * create by: Mr.Fang
     * description: 获取资源列表,
     *
     * @return java.lang.String  字符串响应结果: 
     * @Param: prefix 文件名前缀
     * @Param: marker 位置标记这个参数是七牛返回的,下次携带这个参数访问就可以实现分页了,如果没有返回这个参数表示,总记录不满足分页条件,或最后一页了
     * @Param: limit 每次迭代的长度限制,最大1000,推荐值 1000
     * @Param: delimiter 指定目录分隔符,列出所有公共前缀(模拟列出目录效果)。缺省值为空字符串
     * @Time time: 2022/5/1 9:52
     * @see 字段含义这里 https://developer.qiniu.com/kodo/1284/list
     */
    public static FileListing listPage(String prefix, String marker, int limit, String delimiter) {
        BucketManager bucketManager = new BucketManager(auth, cfg);
        try {
            // FIXME: 2022/5/1 返回JSON格式 自己处理
//            Response response = bucketManager.listV2(bucket, prefix, marker, limit, delimiter);
//            String bodyString = response.bodyString();  // 响应结果
//            printResult(response);
//            return bodyString;
            // FIXME: 2022/5/1 返回 牛牛封装的文件对象
            FileListing fileListing = bucketManager.listFiles(bucket, prefix, marker, limit, delimiter);
            return fileListing;

        } catch (QiniuException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * create by: Mr.Fang
     * description: 输出响应结果
     * create time: 2022/5/1 9:41
     *
     * @return void
     * @Param: response
     */
    public static void printResult(Response response) {
        System.out.println(String.format("状态码:[%d]", response.statusCode)); // 状态码:[200]
        System.out.println(String.format("耗时:[%f]", response.duration)); // 耗时:[0.366000] 单位毫秒
        try {
            System.out.println(String.format("响应结果:[%s]", response.bodyString())); // 响应结果:[["32123","222"]]
        } catch (QiniuException e) {
            e.printStackTrace();
        }
    }

}

 pom.xml

<dependency>
    <groupId>com.squareup.okhttp3groupId>
    <artifactId>okhttpartifactId>
    <version>3.14.2version>
    <scope>compilescope>
dependency>
<dependency>
    <groupId>com.google.code.gsongroupId>
    <artifactId>gsonartifactId>
    <version>2.8.5version>
    <scope>compilescope>
dependency>
<dependency>
    <groupId>com.qiniugroupId>
    <artifactId>happy-dns-javaartifactId>
    <version>0.1.6version>
    <scope>testscope>
dependency>
<dependency>
    <groupId>junitgroupId>
    <artifactId>junitartifactId>
    <version>4.12version>
    <scope>testscope>
dependency>
<dependency>
    <groupId>com.qiniugroupId>
    <artifactId>qiniu-java-sdkartifactId>
    <version>[7.7.0, 7.10.99]version>
dependency>