阿里云对象存储OSS简单使用

文章目录

概念

基本概念

阿里云对象存储 OSS是一款海量、安全、低成本、高可靠的云存储服务,提供最高可达 99.995 % 的服务可用性。而且提供了多种存储类型,降低我们的存储成本。

Bucket

Bucket是管理文件的存储空间。可以创建多个Bucket达到隔离文件的目的

准备工作

访问该链接 控制台快速入门,按步骤执行以下操作

控制台操作对象存储OSS

  • 从首页进入控制台

  • 创建存储空间

  • 直接上传文件

  • 新建目录后并上传文件

  • 下载文件

  • 删除文件

Java客户端操作对象存储OSS

  • 创建AccessKey


  • 创建一个maven工程
  • 配置oss依赖
xml 复制代码
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.15.1</version>
</dependency>

如果是Java9环境,则需要引入以下依赖

xml 复制代码
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.3</version>
</dependency>
  • 创建Bucket
java 复制代码
   /**
     * 测试创建Bucket
     */
    public static void testCreateBucket() {
        // Endpoint以华北2(北京)为例,其它Region请按实际情况自己指定。
        String endpoint = "oss-cn-beijing.aliyuncs.com";
        // 使用代码嵌入的RAM用户的访问密钥配置访问凭证。
        String accessKeyId = ""; // 你的accessKeyId
        String accessKeySecret = ""; // 你的accessKeySecret
        CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret);
        // 填写Bucket名称,例如examplebucket。Bucket名称在OSS范围内必须全局唯一。
        String bucketName = "";  // 你的Bucket
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
        try {
            // 创建存储空间。
            ossClient.createBucket(bucketName);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
  • 测试上传文件
java 复制代码
    /**
     * 测试上传图片
     */
    public static void testUploadFile() {
        // Endpoint以华北2(北京)为例,其它Region请按实际情况自己指定。
        String endpoint = "oss-cn-beijing.aliyuncs.com";
        // 使用代码嵌入的RAM用户的访问密钥配置访问凭证。
        String accessKeyId = ""; // 你的accessKeyId
        String accessKeySecret = ""; // 你的accessKeySecret
        CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret);
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "";  // 你的Bucket
        // 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
        String objectName = "20240604/测试.png";

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // 上传一张图片,指定本地图片路径
            ossClient.putObject(bucketName, objectName, new File("C:\\Users\\cmbsysadmin\\Desktop\\测试图片\\测试.png"));
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
  • 测试下载文件
java 复制代码
   /**
     * 测试下载文件
     */
    public static void testDownFile() {
        // Endpoint以华北2(北京)为例,其它Region请按实际情况自己指定。
        String endpoint = "oss-cn-beijing.aliyuncs.com";
        // 使用代码嵌入的RAM用户的访问密钥配置访问凭证。
        String accessKeyId = ""; // 你的accessKeyId
        String accessKeySecret = ""; // 你的accessKeySecret
        CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret);
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "";  // 你的Bucket
        // 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
        String objectName = "20240604/测试.png";

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // 调用ossClient.getObject返回一个OSSObject实例,该实例包含文件内容及文件元数据。
            OSSObject ossObject = ossClient.getObject(bucketName, objectName);
            // 调用ossObject.getObjectContent获取文件输入流,可读取此输入流获取其内容。
            // 将文件下载到指定目录
            try (InputStream content = ossObject.getObjectContent();
                 FileOutputStream fileOutputStream = new FileOutputStream("D:\\upload\\testFile\\测试.png");) {
                byte[] buffer = new byte[1024];
                int length = 0;
                while ((length = content.read(buffer)) != -1) {
                    fileOutputStream.write(buffer, 0, length);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
  • 测试删除文件
java 复制代码
    /**
     * 测试删除文件
     */
    public static void testDeleteFile() {
        // Endpoint以华北2(北京)为例,其它Region请按实际情况自己指定。
        String endpoint = "oss-cn-beijing.aliyuncs.com";
        // 使用代码嵌入的RAM用户的访问密钥配置访问凭证。
        String accessKeyId = ""; // 你的accessKeyId
        String accessKeySecret = ""; // 你的accessKeySecret
        CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret);
        // 填写Bucket名称,例如examplebucket。
        String bucketName = ""; // 你的Bucket
        // 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
        String objectName = "20240604/测试.png";

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // 删除文件。
            ossClient.deleteObject(bucketName, objectName);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }

参考来源

相关推荐
Database_Cool_1 天前
OpenClaw-Observability:基于 DuckDB 构建 OpenClaw 的全链路可观测体系
数据库·阿里云·ai
s听风忆雪2 天前
aliyun 阿里云服务器 mysql 开启安全组 3306 依然访问不了
服务器·安全·阿里云
明天…ling3 天前
Xshell远程连接阿里云ECS超详细教程
阿里云·云计算
云布道师3 天前
【云故事探索】NO.24 | 让教育因云而无界:易康思科技如何用阿里云打破“算力孤岛”?
科技·阿里云·云计算
阿里云云原生3 天前
Flink 实时计算 x SLS 存储下推:阿里云 OpenAPI 网关监控平台实践
大数据·阿里云·flink
王权富贵-3 天前
100% 兼容 PostgreSQL:PolarDB V2.0 让数据库迁移像“搬家”一样简单
数据库·阿里云·国产数据库·国产自研数据库
奇思智算3 天前
从零到部署:Hugging Face Transformers训练全链路解析
阿里云·智星云·gpu算力租用
九伯都4 天前
云效-流水线-简单部署
运维·阿里云·持续部署
翼龙云_cloud4 天前
阿里云代理商:如何基于百炼模型数据构建企业级智能分析平台?
阿里云·大模型·云计算