SaaS-七牛云存储

别说谁变了你拦得住时间么 提交于 2020-01-28 16:57:48

2 七牛云存储

1.1 概述

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

七牛云官网

使用七牛云实现图片存储也比较简单只需要按照如下的步骤操作即可:

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

1.2 账户申请

(1) 进入七牛云官方网站注册开发者账户
七牛云是通过邮箱注册的,注册激活后就进行认证,认证后即可开通对象存储业务了
在这里插入图片描述
(2)创建存储空间 Bucket
点击左侧左侧菜单 对象存储,一开始我们需要新建一个存储空间来存放我们的图片资源。点击 新建存储空间,设置一些需要的内容,然后在左侧的存储空间列表我们就可以看到新加的空间了。

在这里插入图片描述

账号注册有些需要注意的点如下:

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

1.3 入门案例

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

1.3.1 搭建环境

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

1.3.2 文件上传

 @Test
    public void testUploadImage() {
        Configuration cfg = new Configuration(Zone.zone0());
        UploadManager uploadManager = new UploadManager(cfg);
        String accessKey = "COuoDRVa7JLsuurzIvQSI_pEDceHDw3yGfJEmvwv";
        String secretKey = "3RWpTjB5Jxg3QosUFr4mxbHXJ5JR2m6AHQqYsSlr";
        String bucket = "test-bucket";
        String localFilePath = "C:\\Users\\ThinkPad\\Desktop\\ihrm\\day9\\资源\\照片
\\001.png";
        //默认不指定key的情况下,以文件内容的hash值作为文件名
        String key = "test";
        Auth auth = Auth.create(accessKey, secretKey);
        String upToken = auth.uploadToken(bucket);
        try {
            Response response = uploadManager.put(localFilePath, key, upToken);
            //解析上传成功的结果
            DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), 
DefaultPutRet.class);
            System.out.println(response.bodyString());
       } catch (QiniuException ex) {
            Response r = ex.response;
            System.err.println(r.toString());
            try {
                System.err.println(r.bodyString());
           } catch (QiniuException ex2) {
                //ignore
           }
       }
   }

1.3.3 断点续传

 @Test
    public void testUploadImage1() {
        Configuration cfg = new Configuration(Zone.zone0());
        String accessKey = "COuoDRVa7JLsuurzIvQSI_pEDceHDw3yGfJEmvwv";
        String secretKey = "3RWpTjB5Jxg3QosUFr4mxbHXJ5JR2m6AHQqYsSlr";
        String bucket = "test-bucket";
        String key = "test";
        Auth auth = Auth.create(accessKey, secretKey);
        String upToken = auth.uploadToken(bucket);
        String localFilePath = "C:\\Users\\ThinkPad\\Desktop\\ihrm\\day9\\资源
\\test.xlsx";
        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();
       }
   }

1.4 文件下载

对于公开空间,其访问的链接主要是将空间绑定的域名(可以是七牛空间的默认域名或者是绑定的自定义域名)拼接上空间里面的文件名即可访问,标准情况下需要在拼接链接之前,将文件名进行 urlencode 以兼容不同的字符。

1.5 七牛云实现用户头像上传

(1)创建文件上传的工具类

public class QiniuUploadUtil {
    private static final String accessKey = "COuoDRVa7JLsuurzIvQSI_pEDceHDw3yGfJEmvwv";
    private static final String secretKey = "3RWpTjB5Jxg3QosUFr4mxbHXJ5JR2m6AHQqYsSlr";
    private static final String bucket = "test-bucket";
    private static final String prix = "http://pk9vj7em6.bkt.clouddn.com/";
    private UploadManager manager;
    public QiniuUploadUtil() {
        //初始化基本配置
        Configuration cfg = new Configuration(Zone.zone0());
        //创建上传管理器
        manager = new UploadManager(cfg);
   }
    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;
   }
}

(2)使用七牛云实现用户头像上传
修改UserService方法

  public String uploadImage(String id, MultipartFile file) throws Exception {
        User user = userDao.findById(id).get();
        String key = new QiniuUploadUtil().upload(user.getId(), file.getBytes());
        if(key != null) {
            user.setStaffPhoto(key);
            userDao.save(user);
       }
        return key;
   }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!