• 阿里云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中哈;好,就先酱紫吧!

    余路那么长,还是得带着虔诚上路...
  • 相关阅读:
    HDU2206:IP的计算
    HDU 2054 A == B ?A
    怎样确定循环节
    Python和Java编程题(二)
    Python和Java编程题(一)
    Java中的静态变量、静态方法问题
    快速排序的Java和python实现,亲测实际可用
    Java和Python分别实现直接选择排序
    Python和Java分别实现冒泡排序
    JavaScript(第十六天)【BOM基础】
  • 原文地址:https://www.cnblogs.com/itiaotiao/p/12800228.html
Copyright © 2020-2023  润新知