七牛云对象存储使用指南

对象存储服务简介

七牛云海量存储系统(KODO)是自主研发的非结构化数据存储管理平台,支持中心和边缘存储。平台经过多年大规模用户验证已跻身先进技术行列,并广泛应用于海量数据管理的各类场景。
在这里插入图片描述
详细介绍参考官网:https://www.qiniu.com/products/kodo

产品优势
  1. 高可靠
    业界领先的纠删码存储方案,能够提供高达 11 个 9 的数据可靠性。跨数据中心的副本冗余,能够保障服务的超高可用性。
  2. 低成本
    无需前期投入。七牛云对象存储按需使用、按需付费的便捷性,能够有效避免存储及带宽资源的闲置浪费。
  3. 存储加速
    边缘存储可充分利用可用链路带宽,数据在边缘节点上传和下载可平均提速 60% 以上。
  4. 易扩展
    利用七牛云对象存储,您的存储空间无上限的同时也无需担心扩容问题。您能够实现存储需求的弹性伸缩,从而提高业务灵活性。
  5. 数据智能化
    与七牛云其他产品紧密协同,提供标准 HDFS 访问方式,为大数据和机器学习的海量高速读写场景进行了大量优化。
  6. 边缘计算
    就近集成边缘计算及边缘缓存服务,边缘存储节点具备本地数据处理能力。
核心功能及服务
  1. 多媒体数据处理
    基于对象存储,您可以一站式地完成图片处理和音视频处理
  2. 镜像存储
    镜像存储适用于迁移原有业务系统的已有数据。可以帮助用户实现无缝数据迁移,迁移过程中并不影响原有业务系统的访问。
  3. 上传/下载
    针对不同的上传/下载场景,七牛云提供了丰富的API接口和工具供用户使用,同时支持服务端上传和客户端直传,并提供加速服务。
  4. 灵活部署
    同时支持在七牛云边缘节点和客户侧边缘节点部署边缘存储服务。
  5. 多级备份
    提供边缘和中心多级服务备份。
  6. 边缘安全
    通信加密,及时脱敏,边缘存储数据具备网银级安全可靠性。

创建对象存储空间

  1. 注册七牛云账号:https://portal.qiniu.com/signup
  2. 开通对象存储服务:https://www.qiniu.com/products/kodo

在这里插入图片描述
3. 新建存储空间:https://portal.qiniu.com/bucket/create

选择服务器所在区域,访问控制方式。

公开空间可实现无需认证即可下载空间中的文件
在这里插入图片描述
4. 创建成功,获取融合 CDN 测试域名:下载文件时需要使用此域名

在这里插入图片描述
5. 获取七牛云服务秘钥:https://portal.qiniu.com/user/key

在这里插入图片描述

上传文件测试

官方提供了Java SDK来方便开发。

Java SDK简介

使用此 SDK 构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云上。无论您的网络应用是一个网站程序,还是包括从云端(服务端程序)到终端(手持设备应用)的架构服务或应用,通过七牛云及其SDK,都能让您应用程序的终端用户高速上传和下载,同时也让您的服务端更加轻盈。

Java SDK 属于七牛服务端SDK之一,主要有如下功能:

  1. 提供生成客户端上传所需的上传凭证的功能
  2. 提供文件从服务端直接上传七牛的功能
  3. 提供对七牛空间中文件进行管理的功能
  4. 提供对七牛空间中文件进行处理的功能
  5. 提供七牛CDN相关的刷新,预取,日志功能

详细内容参考官网:https://developer.qiniu.com/kodo/sdk/1239/java

使用SDK上传文件
  1. 在项目中引入依赖,在common工程添加以下依赖
<dependency>
    <groupId>com.qiniu</groupId>
    <artifactId>qiniu-java-sdk</artifactId>
    <version>7.2.25</version>
</dependency>
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.2</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.47</version>
</dependency>
  1. 在Common工程下编写七牛云的工具类QiniuUtils
package com.shanjupay.common.util;

import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import com.qiniu.util.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.UUID;

/**七牛云测试工具类
 * @author Administrator
 * @version 1.0
 **/
public class QiniuUtils {

    private static final Logger LOGGER = LoggerFactory.getLogger(QiniuUtils.class);
    /**
     *  文件上传的工具方法
     * @param accessKey
     * @param secretKey
     * @param bucket
     * @param bytes
     * @param fileName 外部传进来,七牛云上的文件名称和此保持一致
     */
    public static void  upload2qiniu(String accessKey,String secretKey,String bucket, byte[] bytes,String fileName) throws RuntimeException{

        //构造一个带指定 Region 对象的配置类,指定存储区域,和存储空间选择的区域一致
        Configuration cfg = new Configuration(Region.huanan());
        //...其他参数参考类注释
        UploadManager uploadManager = new UploadManager(cfg);

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

            //认证
            Auth auth = Auth.create(accessKey, secretKey);
            //认证通过后得到token(令牌)
            String upToken = auth.uploadToken(bucket);
            try {
                //上传文件,参数:字节数组,key,token令牌
                //key: 建议我们自已生成一个不重复的名称
                Response response = uploadManager.put(bytes, 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());
                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());
        }
    }
}
  1. 将七牛云的AccessKey/SecretKey和存储空间名配置到代码中:https://portal.qiniu.com/user/key
public static String accessKey = "";
public static String secretKey = "";
public static String bucket = "";
  1. 调用SDK上传文件

参考官方提供的方法,这里测试字节数组上传方法:
在这里插入图片描述

//测试文件上传
private static void testUpload(){
    //构造一个带指定 Region 对象的配置类,指定存储区域,和存储空间选择的区域一致
    Configuration cfg = new Configuration(Region.huanan());
    //...其他参数参考类注释
    UploadManager uploadManager = new UploadManager(cfg);
    //...生成上传凭证,然后准备上传
    String accessKey = "88Vvm_0jHMVJp2tJna8SVKwmt8oCmR8CDZdMVDeX";
    String secretKey = "V68zp5TjijcGX7Rp_aVJ1Rw1ZzSEikazfTwhWuo0";
    String bucket = "shanjupay-test1";
    //默认不指定key的情况下,以文件内容的hash值作为文件名
    String key = UUID.randomUUID().toString()+".png";
    FileInputStream fileInputStream = null;
    try {

        String filePath = "C:\\Users\\zhuchifeng\\Desktop\\1.jpg";
        fileInputStream = new FileInputStream(new File(filePath));
        //得到本地文件的字节数组
        byte[] bytes = IOUtils.toByteArray(fileInputStream);
//            byte[] uploadBytes = "hello qiniu cloud".getBytes("utf-8");
        //认证
        Auth auth = Auth.create(accessKey, secretKey);
        //认证通过后得到token(令牌)
        String upToken = auth.uploadToken(bucket);
        try {
            //上传文件,参数:字节数组,key,token令牌
            //key: 建议我们自已生成一个不重复的名称
            Response response = uploadManager.put(bytes, 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) {
        //ignore
    }
}
  1. 编写测试方法上传文件
public static void main(String[] args) throws UnsupportedEncodingException {
    //上传测试
	QiniuUtils.testUpload();
}
  1. 上传测试完成,通过七牛云平台查看上传的文件:https://portal.qiniu.com/bucket,选择上传使用的存储空间查看内容

在这里插入图片描述

下载文件测试

参考官方文档:
在这里插入图片描述
1、公开空间

对于公开空间,文件的访问链接是将空间绑定的域名加文件名称组成
在这里插入图片描述
链接地址为:http://qecypo0sx.bkt.clouddn.com/140536c8-656f-4a37-a634-31e6f80858b2.png

2、私有空间

私有空间主要存储一些不公开的文件,如果要下载文件则需要通过sdk生成文件访问地址。

首先需要按照公开空间的文件访问方式构建对应的公开空间访问链接,然后再对这个链接进行私有授权签名。

测试代码如下:

private static void getdownloadurl() throws UnsupportedEncodingException {
    String fileName = "140536c8-656f-4a37-a634-31e6f80858b2.png";
    String domainOfBucket = "http://qecypo0sx.bkt.clouddn.com/";
    String encodedFileName = URLEncoder.encode(fileName, "utf-8").replace("+", "%20");
    String publicUrl = String.format("%s/%s", domainOfBucket, encodedFileName);
    String accessKey = "88Vvm_0jHMVJp2tJna8SVKwmt8oCmR8CDZdMVDeX";
    String secretKey = "V68zp5TjijcGX7Rp_aVJ1Rw1ZzSEikazfTwhWuo0";
    Auth auth = Auth.create(accessKey, secretKey);
    long expireInSeconds = 3600;//1小时,可以自定义链接过期时间
    String finalUrl = auth.privateDownloadUrl(publicUrl, expireInSeconds);
    System.out.println(finalUrl);
}
  1. 编写测试方法
public static void main(String[] args) throws UnsupportedEncodingException {
    //上传测试
//    QiniuUtils.testUpload();
    QiniuUtils.getdownloadurl();
}
  1. 执行测试返回下载地址

http://qecypo0sx.bkt.clouddn.com//140536c8-656f-4a37-a634-31e6f80858b2.png?e=1596253823&token=88Vvm_0jHMVJp2tJna8SVKwmt8oCmR8CDZdMVDeX:PCKLS5T9i8uNe3yUTLC4ekc0vhM=

  1. 在浏览器访问下载地址,测试文件是否正确
代码仓库
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

9.冄2.7.號

你的鼓励将是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值