oss存储使用

阿里云提供了5种使用oss存储的方式,包括控制台、命令行、图形化管理工具ossbrowser、SDK、REST API;这里仅对在下常用的命令行、javasdk进行一些说明,其他的不一一详细说明,感兴趣的可以去官网看相关文档和指导视频

官网文档地址:如何使用OSS控制台、ossutil、ossbrowser、OSSSDK_对象存储-阿里云帮助中心

一、控制台:

可以通过OSS控制台完成常见的基础操作,例如创建存储空间(Bucket)、上传和下载文件(Object)等。

OSS控制台使用流程图如下所示:

  1. 开通OSS服务
  2. 创建存储空间
  3. 上传文件

文件上传至目标Bucket后,您可以执行如下操作:

  • 将文件下载至本地。详情请参见下载文件
  • 通过生成签名URL的方式将文件分享给第三方,供其下载或预览。详情请参见分享文件
  • 通过自定义域名(自有域名)访问文件,需要将自定义域名绑定至文件所在的Bucket。详情请参见使用自有域名访问OSS资源。 

二、命令行

需要五步:

1、安装ossuntil

        下载和安装:

                运行环境:Windows、Linux、macOS

                支持架构:x86(32bit、64bit)、ARM(32bit、64bit

        下载地址:   ossutil1.7.8版本基于Golang 1.16版本编译,不支持通过macOS x86 32bit操作系统使用ossutil。因此,ossutil1.7.8及以上版本均不再提供ossutilmac32安装包。

根据您的操作系统下载对应版本,然后按如下步骤安装并配置ossutil,以下均以64位系统为例。

安装:(以linux为例,其他看官网文档)

        

2、Linux系统安装

  1. 运行以下命令下载ossutil。
    wget https://gosspublic.alicdn.com/ossutil/1.7.14/ossutil64                           

    注意 复制下载地址时会自动加上spm编码内容,使用wget命令下载时注意删除链接中?spm=xxxx的内容。

  2. 运行以下命令修改文件执行权限。
    chmod 755 ossutil64
  3. 使用交互式配置生成配置文件。
    1. 输入配置命令。
      ./ossutil64 config
    2. 根据提示设置配置文件路径。建议直接按回车使用默认配置文件的路径。
      请输入配置文件名,文件名可以带路径(默认为:/home/user/.ossutilconfig,回车将使用默认路径。
      如果用户设置为其它路径,在使用命令时需要将--config-file选项设置为该路径): 

      ossutil默认使用/home/user/.ossutilconfig作为配置文件,若您设置了配置文件的路径,则每次使用命令时需增加-c选项指定配置文件。例如配置文件保存为/home/config,使用ls时,命令格式如下:

      ./ossutil64 ls oss://examplebucket -c /home/config
    3. 根据提示设置工具的语言。

      请输入语言CH或EN。工具使用的语言默认与操作系统保持一致。该配置项将在此次config命令设置成功后生效。

2、创建存储空间bucket

  • 命令格式
    ./ossutil64 mb oss://bucket
  • 使用示例

    创建名为examplebucket的存储空间。

    ./ossutil64 mb oss://examplebucket

    以下输出结果表明已成功创建examplebucket。

    0.668238(s) elapsed

有关创建Bucket的更多示例,请参见mb(创建存储空间)

3、上传文件

  • 命令格式
    ./ossutil64 cp local_file oss://bucket
  • 使用示例
    • 上传单个文件examplefile.txt至目标存储空间examplebucket。
      ./ossutil64 cp examplefile.txt oss://examplebucket
    • 上传单个文件examplefile.txt至目标存储空间examplebucket,并将文件重命名为exampleobject.txt。
      ./ossutil64 cp examplefile.txt oss://examplebucket/exampleobject.txt

    以下输出结果表明文件已成功上传至目标Bucket。

    0.720812(s) elapsed

有关上传文件的更多示例,请参见cp(上传文件)

4、下载文件

  • 命令格式
    ./ossutil64 cp cloud_url local_file
  • 使用示例

    将文件examplefile.txt从目标存储空间examplebucket下载至本地localfolder文件夹下。

    ./ossutil64 cp oss://examplebucket/examplefile.txt localfolder/

    将文件examplefile.txt从目标存储空间examplebucket下载至本地localfolder文件夹下,并将文件重命名为exampleobject.txt。

    ./ossutil64 cp oss://examplebucket/examplefile.txt localfolder/exampleobject.txt

    以下输出结果表明文件已成功下载至本地目标文件夹。

    0.720812(s) elapsed

有关下载文件的更多示例,请参见cp(下载文件)

5、分享文件

 生成签名URL

  • 命令格式
    ./ossutil64 sign cloud_url [--timeout <value>]
  • 使用示例

    对目标文件oss://examplebucket/exampleobject.txt生成超时时间为3600秒的文件签名URL。

    ./ossutil64 sign oss://examplebucket/exampleobject.txt --timeout 3600 

    以下输出结果表明已成功生成文件签名URL。

    https://examplebucket.oss-cn-hangzhou.aliyuncs.com/exampleobject.txt?Expires=1608282224&OSSAccessKeyId=LTAI4G33piUmgRN1DXx9****&Signature=jo4%2FGykfuc1A4fvyvKRpRyymYH****
    0.368676(s) elapsed

三、图形化管理工具ossbrowser

四、JAVASDK

1、示例工程

OSS Java SDK提供了基于Maven和Ant的示例工程。您可以在本地设备上编译和运行示例工程,或者以示例工程为基础开发您的应用。工程的编译和运行方法,请参见工程目录下的README.md。

2、创建存储空间

存储空间是OSS的全局命名空间,相当于数据的容器,可以存储若干文件。

以下代码用于创建存储空间。

public class Demo {

    public static void main(String[] args) throws Exception {
         // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = "yourAccessKeyId";
        String accessKeySecret = "yourAccessKeySecret";
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "examplebucket";

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

        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();
            }
        }
    }
}

3、上传文件

以下代码用于通过流式上传的方式将文件上传到OSS。

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import java.io.ByteArrayInputStream;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = "yourAccessKeyId";
        String accessKeySecret = "yourAccessKeySecret";
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "examplebucket";
        // 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
        String objectName = "exampledir/exampleobject.txt";

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

        try {
            String content = "Hello OSS";
            ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));
        } 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();
            }
        }
    }
}

3、下载文件

以下代码用于通过流式下载方式从OSS下载文件。

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.OSSObject;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = "yourAccessKeyId";
        String accessKeySecret = "yourAccessKeySecret";
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "examplebucket";
        // 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
        String objectName = "exampledir/exampleobject.txt";

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

        try {
            // 调用ossClient.getObject返回一个OSSObject实例,该实例包含文件内容及文件元信息。
            OSSObject ossObject = ossClient.getObject(bucketName, objectName);
            // 调用ossObject.getObjectContent获取文件输入流,可读取此输入流获取其内容。
            InputStream content = ossObject.getObjectContent();
            if (content != null) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(content));
                while (true) {
                    String line = reader.readLine();
                    if (line == null) break;
                    System.out.println("\n" + line);
                }
                // 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
                content.close();
            }
        } 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();
            }
        }
    }
}

3、列举文件

以下代码用于列举examplebucket存储空间下的文件。默认列举100个文件。

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = "yourAccessKeyId";
        String accessKeySecret = "yourAccessKeySecret";
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "examplebucket";

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

        try {
            // ossClient.listObjects返回ObjectListing实例,包含此次listObject请求的返回结果。
            ObjectListing objectListing = ossClient.listObjects(bucketName);
            // objectListing.getObjectSummaries获取所有文件的描述信息。
            for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) {
                System.out.println(" - " + objectSummary.getKey() + "  " +
                        "(size = " + objectSummary.getSize() + ")");
            }
        } 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();
            }
        }
    }
}

五、REST API:略

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值