七牛云对象存储 Java使用

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 七牛云对象存储 Java使用

对象存储服务简介


七牛云海量存储系统(KODO)是自主研发的非结构化数据存储管理平台,支持中心和边缘存储。平台经过多年大


规模用户验证已跻身先进技术行列,并广泛应用于海量数据管理的各类场景。


详细介绍参考官网:https://www.qiniu.com/products/kodo


产品优势


  1. 高可靠 :业界领先的纠删码存储方案,能够提供高达 11 个 9 的数据可靠性。跨数据中心的副本冗余,能够保障服务的超高可用性。


  1. 低成本 :无需前期投入。七牛云对象存储按需使用、按需付费的便捷性,能够有效避免存储及带宽资源的闲置浪费。


  1. 存储加速 :边缘存储可充分利用可用链路带宽,数据在边缘节点上传和下载可平均提速 60% 以上。


  1. 易扩展 :利用七牛云对象存储,您的存储空间无上限的同时也无需担心扩容问题。您能够实现存储需求的弹性伸缩,从而提高业务灵活性。


  1. 数据智能化 :与七牛云其他产品紧密协同,提供标准 HDFS 访问方式,为大数据和机器学习的海量高速读写场景进行了大量优化。


  1. 边缘计算 :就近集成边缘计算及边缘缓存服务,边缘存储节点具备本地数据处理能力。


核心功能及服务


  1. 多媒体数据处理:基于对象存储,您可以一站式地完成图片处理和音视频处理


  1. 镜像存储 :镜像存储适用于迁移原有业务系统的已有数据。可以帮助用户实现无缝数据迁移,迁移过程中并不影响原有业务系统的访问。


  1. 上传/下载 :针对不同的上传/下载场景,七牛云提供了丰富的API接口和工具供用户使用,同时支持服务端上传和客户端直传,并提供加速服务。


  1. 灵活部署 :同时支持在七牛云边缘节点和客户侧边缘节点部署边缘存储服务。


  1. 多级备份 :提供边缘和中心多级服务备份。


  1. 边缘安全 :通信加密,及时脱敏,边缘存储数据具备网银级安全可靠性。


创建对象存储空间


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. 提供生成客户端上传所需的上传凭证的功能


  1. 提供文件从服务端直接上传七牛的功能


  1. 提供对七牛空间中文件进行管理的功能


  1. 提供对七牛空间中文件进行处理的功能


  1. 提供七牛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>


2.在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 {
}


3.将七牛云的AccessKey/SecretKey和存储空间名配置到代码中:


        public static String accessKey = ""; 
        public static String secretKey = ""; 
        public static String bucket = "";


  1. 调用SDK上传文件


参考官方提供的方法,这里测试字节数组上传方法:


    private static final Logger LOGGER = LoggerFactory.getLogger(QiniuUtils.class);
    //测试文件上传
    private static void testUpload(){
        //构造一个带指定 Region 对象的配置类,指定存储区域,和存储空间选择的区域一致
        Configuration cfg = new Configuration(Region.huabei());
//...其他参数参考类注释
        UploadManager uploadManager = new UploadManager(cfg);
//...生成上传凭证,然后准备上传
        String accessKey = "n51gh8mN9lq2YtomTPThBIB2yGbh";
        String secretKey = "3A4nj6RlwRxRbjXStV5Rqb_g";
        String bucket = "ju-test2";
//默认不指定key的情况下,以文件内容的hash值作为文件名
        String key = UUID.randomUUID().toString()+".png";
        FileInputStream fileInputStream = null;
        try {
            String filePath = "C:\\Users\\Yang\\Desktop\\test1.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
        }
    }


5.编写测试方法上传文件


    public static void main(String[] args) throws UnsupportedEncodingException {
        //上传测试
        QiniuUtils.testUpload();
    }


6.上传测试完成,通过七牛云平台查看上传的文件:https://portal.qiniu.com/bucket,选择上传使用的存储空间查看内容



没有问题!


下载文件测试


参考官方文档:


1、公开空间


对于公开空间,文件的访问链接是将空间绑定的域名加文件名称组成。


链接地址为:http://r9igvk8y8.hb-bkt.clouddn.com/9fb266d6-530f-4cfd-bbab-ec23a528f069.png


2、私有空间


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


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


测试代码如下:


//获取文件url 
private static void testGetFileUrl() throws UnsupportedEncodingException {
    String fileName = "9fb266d6-530f-4cfd-bbab-ec23a528f069.png";
    String domainOfBucket = "http://r9ig8y8.hb-bkt.clouddn.com";
    String encodedFileName = URLEncoder.encode(fileName, "utf-8").replace("+", "%20");
    String publicUrl = String.format("%s/%s", domainOfBucket, encodedFileName);
    String accessKey = "n51gh8mN9dOinBeShomTPThBIB2yGbh";
    String secretKey = "3A4nj6RVruB_xETYUuRbjXStV5Rqb_g";
    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.testGetFileUrl();
}


2.执行测试返回下载地址



3.在浏览器访问下载地址,测试文件是否正确



没问题!


相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
存储 Java 中间件
【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南
【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南
754 1
【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南
|
存储 API PHP
(转)云存储:阿里云OSS 、又拍云和 七牛 的比较
阿里OSS:好处就是,那是一套完整的体系,存储,数据库,CDN,服务器,阿里都可以给你全包。缺点,费用对于没有盈利的网站来说太高了,好像定位就是给那些高端客户使用的,而且CDN,OSS的流量是分开收费,带宽(2倍成本,呵呵)。
5471 0
|
8月前
|
存储 Java 对象存储
【2】从零玩转OSS阿里云存储服务之Java代码操作
【2】从零玩转OSS阿里云存储服务之Java代码操作
601 0
|
9月前
|
编解码 对象存储 数据安全/隐私保护
七牛云对象存储的设置指南
七牛云对象存储的设置指南
218 0
|
JavaScript 开发工具 对象存储
Node.js操作七牛云OSS进行多文件压缩为zip的方法
Node.js操作七牛云OSS进行多文件压缩为zip的方法
|
开发工具 对象存储
一个集成阿里云、腾讯云、七牛云对象存储的SDK
概述 超级快速使用阿里云OSS或腾讯COS及七牛云Koa获取、放置、删除对象 Supper quick use Aliyun OSS or Tencent COS or Qiniu Koa to get、put、delete Object.
|
机器学习/深度学习 XML 缓存
|
Java Apache 开发工具
【OSS 排查方案-4】OSS + RTMP 推流的 JAVA 方法
目前有很多直播爱好者使用的是 OSS + RTMP 做的推流直播,其中不乏一些企业级别应用,由于 OSS 作为推流的接收略微有一些复杂,故单独开篇讲一下。其实不建议使用 OSS+RTMP 做直播推流,因为功能性相比专业的阿里云直播几乎为 0 ,而且性能上并不好。
|
云安全 运维 算法
JAVA实现RTMP推流上传阿里云OSS的签名URL
由于目前官方帮助文档提供的示例是Python的,本文介绍如何使用JAVA实现生成LiveChannel的签名URL,包括推流地址和播放地址。
2276 0
JAVA实现RTMP推流上传阿里云OSS的签名URL
|
云安全 运维 Java
【OSS最佳实践】JAVA实现RTMP推流上传OSS的签名URL
背景介绍 OSS支持使用RTMP协议推送H264编码的视频流和AAC编码的音频流到OSS。推送到OSS的音视频数据可以点播播放;在对延迟不敏感的应用场景,也可以做直播用途。RTMP推流上传的流程是创建LiveChannel以后生成推流地址,关于这块的介绍在官方帮助文档里也有介绍,具体可以参考文档"RTMP推流上传"。
2122 0
【OSS最佳实践】JAVA实现RTMP推流上传OSS的签名URL