七牛云存储--入门

七牛云存储

一. 概述​

七牛云对象存储服务提供高可靠,强安全,低成本,可扩展的非结构化数据的存储服务。它提供简单的Web服务接口,可以通过七牛开发者平台或客户端存储和检索任意数量的数据,指出“按使用付费”模式,可以通过调用REST API接口和SDK卡法工具白访问,下载协议采用HTTP和HTTPS协议。方便程序员聚焦业务应用,而无需关注底层存储实现技术。
使用七牛云实现图片存储也比较简单,只需按照如下步骤操作即可:

  1. 申请七牛云账户
  2. 创建空间Bucket
  3. 上传文件
  4. 请求获取图片

二. 操作

1. 进入七牛云官方网站注册开发者账户https://www.qiniu.com

七牛云是通过邮箱注册的,注册激活后就进行认证,认证后即可开通对象存储业务了。要注意的是注册成功后一定要先进行是实名认证,否则加下来的操作可能无法进行。
在这里插入图片描述

2. 创建存储空间 Bucket

点击左侧左侧菜单 对象存储,一开始我们需要新建一个存储空间来存放我们的图片资源。点击新建存储空间,设置一些需要的内容,然后在左侧的存储空间列表我们就可以看到新加的空间了。
在这里插入图片描述
账号注册有些需要注意的点如下:

  • 注册账号之后需要实名认证(个人/企业)
  • 实名认证之后才可以创建存储空间
  • 存储空间创建成功之后,找到个人中心获取accessKey,secretKey和存储空间名称就可以进行上操作了

3. 关于密钥

可以在个人中心的密钥管理中找到:

在这里插入图片描述

4. 官方SDK

https://developer.qiniu.com/kodo/sdk/1239/java#upload-resumable

三. 入门案例

七牛对象存储将数据文件以资源的形式上传到空间中。可以创建一个或者多个空间,然后向每个空间中上传一个或多个文件。通过获取已上传文件的地址进行文件的分享和下载。

1. 添加pom依赖

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

2. 通过SDK上传图片

/**
 * 将图片上传到七牛云服务(实际开发中将用户id设置成key)
 *      1.更新用户图片信息(用户id=key)
 *      2.访问图片
 *          存储空间分配的:http://pkbivgfrm.bkt.clouddn.com
 *          上传的文件名
 *          更新图片之后:访问的时候,再请求连接添加上时间戳
 *
 */
@Test
public void testUpload01(){
    //构造一个带指定Zone对象的配置类
    //指定上传文件服务器地址:
    Configuration cfg = new Configuration(Zone.autoZone());
    //...其他参数参考类注释
    //上传管理器
    UploadManager uploadManager = new UploadManager(cfg);
    //...生成上传凭证,然后准备上传
    //公钥
    String accessKey = "xxx";
    //密钥
    String secretKey = "xxx";
    //存储空间名称
    String bucket = "xxx";

    //图片路径
    String localFilePath = "D:\\IdeaWorkSpace\\03-SaasHRM\\qiniu-test\\src\\main\\resources\\image\\002.png";

    //存入到存储空间的文件名
    String key = "test";

    //身份认证
    Auth auth = Auth.create(accessKey, secretKey);
    //指定覆盖上传, 若不指定第二个参数key则不支持覆盖上传
    String uploadToken = auth.uploadToken(bucket, key);

    try {
        //上传
        Response response = uploadManager.put(localFilePath, key, uploadToken);
        //解析上传成功的结果
        DefaultPutRet defaultPutRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
        System.out.println(defaultPutRet.key);
        System.out.println(defaultPutRet.hash);
    } catch (QiniuException e) {
        Response response = e.response;
        System.err.println(response.toString());
        try {
            System.err.println(response.bodyString());
        } catch (QiniuException e1) {
            //ignore
        }
    }

}

运行图片文件上传代码,上传成功后如下图所示:

在这里插入图片描述
在这里插入图片描述
注意:
(1)想要访问上传的图片,需要 域名 + “/” + key(域名就是上图中的外链默认域名
例如:http://polmpxzzs.bkt.clouddn.com/test
(2)七牛云的图片上传具有一定的缓存机制,若是替换了图片后继续访问该链接可能还是上一张图片,这时要在url后加上一个随机字符串(可使用当前时间的时间戳)
例如:http://polmpxzzs.bkt.clouddn.com/test?t=123

3. 断点续传

//断点续传
@Test
public void testUpload02() {
    //构造一个带指定Zone对象的配置类
    Configuration cfg = new Configuration(Zone.zone0());
    //...其他参数参考类注释
    //...生成上传凭证,然后准备上传
    String accessKey = "xxx";
    String secretKey = "xxx";
    String bucket = "xxx";
    //如果是Windows情况下,格式是 D:\\qiniu\\test.png
    String localFilePath = "D:\\IdeaWorkSpace\\03-SaasHRM\\qiniu-test\\src\\main\\resources\\test.xlsx";
    //默认不指定key的情况下,以文件内容的hash值作为文件名
    String key = "testExcel";
    Auth auth = Auth.create(accessKey, secretKey);
    String upToken = auth.uploadToken(bucket);

    //断点续传:
    String localTempDir = Paths.get(System.getProperty("java.io.tmpdir"), bucket).toString();
    System.out.println(localTempDir);
    try {
        //设置断点续传文件进度保存目录
        FileRecorder fileRecorder = new FileRecorder(localTempDir);
        UploadManager uploadManager = new UploadManager(cfg, fileRecorder);
        try {
            Response response = uploadManager.put(localFilePath, key, upToken);
            //解析上传成功的结果
            DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
            System.out.println(putRet.key);
            System.out.println(putRet.hash);
        } catch (QiniuException ex) {
            Response r = ex.response;
            System.err.println(r.toString());
            try {
                System.err.println(r.bodyString());
            } catch (QiniuException ex2) {
                //ignore
            }
        }
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

在断点上传的中途停下后,会打印出临时文件的存储位置。该文件就是我们文件断点上传的具体信息。
在这里插入图片描述

四. 封装工具类

package com.ihrm.common.utils;

import com.google.gson.Gson;
import com.qiniu.common.Zone;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;

import java.util.Date;

public class QiniuUploadUtil {

    private static final String accessKey = "xxx";//公钥
    private static final String secretKey = "xxx";//密钥
    private static final String bucket = "xxx";//空间名
    private static final String prix = "http://xxx/";//外链地址
    private UploadManager manager;

    public QiniuUploadUtil() {
        //初始化基本配置
        Configuration cfg = new Configuration(Zone.zone0());
        //创建上传管理器
        manager = new UploadManager(cfg);
    }

   //文件名 = key
   //文件的byte数组
    public String upload(String imgName , byte [] bytes) {
        Auth auth = Auth.create(accessKey, secretKey);
        //构造覆盖上传token
        String upToken = auth.uploadToken(bucket,imgName);
        try {
            Response response = manager.put(bytes, imgName, upToken);
            DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
            //返回请求地址
            return prix+putRet.key+"?t="+new Date().getTime();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36662478/article/details/88651254