zoukankan      html  css  js  c++  java
  • 阿里云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中哈;好,就先酱紫吧!

    余路那么长,还是得带着虔诚上路...
  • 相关阅读:
    poj 1743 Musical Theme 后缀数组
    poj 1743 Musical Theme 后缀数组
    cf 432D Prefixes and Suffixes kmp
    cf 432D Prefixes and Suffixes kmp
    hdu Data Structure? 线段树
    关于position和anchorPoint之间的关系
    ios POST 信息
    CALayers的代码示例
    CALayers详解
    ios中得sqlite使用基础
  • 原文地址:https://www.cnblogs.com/itiaotiao/p/12800228.html
Copyright © 2011-2022 走看看