阿里云OSS实践篇

我们知道一般的热点数据我们直接存到数据库,但是类似一些表格模板,附件等静态资源放在哪里呢?

  • 数据库
  • 数据库 + 本地文件(IO流)
  • 数据库 + 缓存 + 文件服务器(Hdfs 、fastDFS、服务器集群)
  • 数据库 + 缓存 + 文件存储(对象存储服务OSS)

因为阿里云提供了各种常用语言的SDK,所以进行文件的存储就变得十分简单,那本文就来介绍下阿里云的对象存储OSS使用。

开通OSS服务

搜索后,购买直接就可以使用,它是按流量计算费用的,话说我们买个10块钱的足够我们基本的学习使用了,不够了再充值嘛!我这里因为用的就是阿里云服务器,所以好像是赠送了40G的存储,具体也懒的去了解,反正没要我再交钱就是。

了解阿里云OSS

通过了解它的官方文档,我们基本可以知道阿里云OSS提供了面向各种常用语言的SDk,通过这些SDK我们基本可以知道如何使用了。

点击JAVA SDK快速入门我们可以看到对应的maven 工程示例;这里自己点进去了解即可!

题外话: 后面对于其他东西的学习,个人建议都是先找官方文档了解,至于本篇博客个人也只是做个笔记,记录下简单的使用,肯定不如官网的全面。

快速上手

1.创建Bucket

如果你听了我的建议,了解过JAVA SDk 中的工程例子,我想你应该知道要使用OSS 需要4个参数:

  • endpoint
  • AccessKeyID
  • AccessKeySecret
  • bucketName

这里我们先记录下 bucketName: oss-study01;endpoint:oss-cn-beijing.aliyuncs.com

2.创建文件夹

创建一个存放图片的文件夹images

3.上传一张图片测试

注意:是点击进此文件后再上传

这里我们选择单个文件的权限是公共读,当然你也可以通过修改整个文件的权限,目前此文件夹我们没修改就是默认的私有的!

4.访问控制

添加用户组-->创建用户-->添加用户到用户组-->分配用户组权限-->保存账号信息

其实就像我们的系统的权限,角色和用户的关系,某些用户是某些角色,某些角色就具有某些分配好的权限!

具体步骤截图如下:


记录下

  • AccessKeyID: LTAI4FoYHgbk2y3woYH191Ys

  • AccessKeySecret:FVZzvz4G9e39ako5vVMASYryrbpnJu


测试SDK

1.创建微服务,引入阿里OSS依赖

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.8.0</version>
</dependency>

2. 测试

package com.coding.aliyunoss;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;
import org.junit.Test;
import java.io.File;

public class OSSTest {

    String endpoint = "oss-cn-beijing.aliyuncs.com";
    // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。
    // 强烈建议您创建并使用RAM账号进行API访问或日常运维,
    // 请登录 https://ram.console.aliyun.com 创建RAM账号。
    String accessKeyId = "LTAI4FoYHgbk2y3woYH191Ys";
    String accessKeySecret = "FVZzvz4G9e39ako5vVMASYryrbpnJu";
    String bucketName = "oss-study01";

    // 判断是否 bucketName,如果不存在就创建,修改权限

    // 创建oss 实例
    @Test
    public void testCreate(){
        // 对象
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 方法
        ossClient.createBucket(bucketName);
        // 关闭对象
        ossClient.shutdown();
    }

    // 判断当前实例是否存在
    @Test
    public void testExist(){
        // 对象
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 方法
        boolean exist = ossClient.doesBucketExist(bucketName);
        System.out.println(exist);
        // 关闭对象
        ossClient.shutdown();
    }

    // 修改权限 公共读
    @Test
    public void testUpdate(){
        // 对象
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 方法 (修改已经有的,创建新的)
        ossClient.setBucketAcl(bucketName,CannedAccessControlList.PublicRead);
        // 关闭对象
        ossClient.shutdown();
    }

    // 上传文件

    // 上传文件流。
    @Test
    public void testFileUpload(){
        // 对象
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 方法 (修改已经有的,创建新的)
        // 上传到 oss 后需要一个文件名(保证唯一 /2020/4/1/xxxxxxxx.jpg)!
        String objectName = "images/default.jpg";
        ossClient.putObject(bucketName, objectName, new File("C:\\Users\\Administrator\\Desktop\\dafault.jpg"));

        // 关闭对象
        ossClient.shutdown();
    }


    // 下载文件
    @Test
    public void testDownload(){
        // 对象
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 方法 (修改已经有的,创建新的)
        String objectName = "images/default.jpg";
        ossClient.getObject(new GetObjectRequest(bucketName,objectName),new File("a.jpg"));

        // 关闭对象
        ossClient.shutdown();
    }

    // 查看文件列表
    @Test
    public void testShowList(){
        // 对象
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 方法 (修改已经有的,创建新的)
        // ossClient.listObjects返回ObjectListing实例,包含此次listObject请求的返回结果。
        ObjectListing objectListing = ossClient.listObjects(bucketName);
        // objectListing.getObjectSummaries获取所有文件的描述信息。
        for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) {
            System.out.println(" - " + objectSummary.getKey() + "  		 " +"(size = " + objectSummary.getSize() + ")");
        }

        // 关闭对象
        ossClient.shutdown();
    }


    // 删除文件
    @Test
    public void testDeleted(){
        // 对象
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 方法 (修改已经有的,创建新的)
        String objectName = "images/default.jpg";
        ossClient.deleteObject(bucketName,objectName);
        // 关闭对象
        ossClient.shutdown();
    }
}

后面我们就可以用接口调用,完成我们文件的上传和下载了。是不是很简单?赶快去试试吧;当然这只是测试代码,别忘了参数啥的应该弄成可配置的还有对象等的关闭都应该放在finally中哈;好,就先酱紫吧!

posted @ 2020-04-29 09:55  叁有三分之一  阅读(1323)  评论(0编辑  收藏  举报