Spring Boot 对接 七牛云存储对象

Scroll Down

详细内容参考七牛云官方文档七牛云官方对接文档
这里是Spring Boot项目,使用maven环境。

1、引入maven依赖

<dependency>
  <groupId>com.qiniu</groupId>
  <artifactId>qiniu-java-sdk</artifactId>
  <version>[7.2.0, 7.2.99]</version>
</dependency>

这里的version指定的是一个版本范围,可以直接指定,本项目指定的事7.2.25版本。
这里包含了如下的第三方库:

<dependencies>
    <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>
  </dependencies>

2、FileUploadUtil工具类

public class QiNiuUtils {

    private static final Logger LOGGER = LoggerFactory.getLogger(QiNiuUtils.class);

    /**
     * 文件上传工具方法
     * @param accessKey
     * @param secretKey
     * @param bucket
     * @param bytes
     * @param fileName
     * @throws QiniuException
     */
    public static void upload2QiNiu(String accessKey, String secretKey, String bucket, byte[] bytes, String fileName) throws QiniuException {
        //构造一个带指定 Region 对象的配置类
        Configuration cfg = new Configuration(Region.huanan());
        //...其他参数参考类注释
        UploadManager uploadManager = new UploadManager(cfg);

        //默认不指定key的情况下,以文件内容的hash值作为文件名
        String key = fileName;
        try {

            ByteArrayInputStream byteInputStream = new ByteArrayInputStream(bytes);
            Auth auth = Auth.create(accessKey, secretKey);
            String upToken = auth.uploadToken(bucket);
            try {
                Response response = uploadManager.put(byteInputStream, key, upToken, null, null);
                //解析上传成功的结果
                DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);

            } catch (QiniuException ex) {
                Response r = ex.response;
                System.err.println(r.toString());
                LOGGER.error("上传文件到七牛:{}", ex.getMessage());
                try {
                    LOGGER.error(r.bodyString());
                } catch (QiniuException ex2) {
                    //ignore
                }
                throw new RuntimeException(r.bodyString());
            }
        } catch (Exception ex) {
            LOGGER.error("上传文件到七牛:{}", ex.getMessage());
            throw new RuntimeException(ex.getMessage());
        }

    }


    /**
     * 获取文件下载链接
     *
     * @param accessKey
     * @param secretKey
     * @param fileName
     * @param domainOfBucket
     * @param expireInSeconds
     * @return
     * @throws UnsupportedEncodingException
     */
    public static String getDownloadUrl(String accessKey, String secretKey, String fileName, String domainOfBucket, long expireInSeconds) throws UnsupportedEncodingException {
        String encodedFileName = URLEncoder.encode(fileName, "utf-8").replace("+", "%20");
        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);
        return finalUrl;
    }


}

这里是自己根据七牛云官方文档结合自己的项目编写的Util工具类。
upload2QiNiu()方法参数说明:
accessKey, secretKey: 因为七牛云的Java SDK的使用是需要授权的,需要用户提供accessKey和secretKey,这两个参数在七牛云账户的个人中心---密钥管理可以获取。
bucket:对象存储的空间名称,获取地方在七牛云控制台---对象存储---空间管理,列表的空间名称。
bytes: 上传对象转换的二进制数组
fileName: 指定存储文件的名称

getDownloadUrl()方法参数说明:
accessKey, secretKey: 因为七牛云的Java SDK的使用是需要授权的,需要用户提供accessKey和secretKey,这两个参数在七牛云账户的个人中心---密钥管理可以获取。
fileName: 指定存储文件的名称
domainOfBucket:空间绑定的域名。在空间管理,空间列表中的每行的操作列表中,点击概览获取。例如:q936lxks6.bkt.clouddn.com
expireInSeconds:设置过期时间