阿里云OSS并测试上传

 什么是对象存储 OSS

阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。其数据设计持久性不低于 99.9999999999%(12 个 9),服务设计可用性(或业务连续性)不低于 99.995%。

OSS 具有与平台无关的 RESTful API 接口,您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。

您可以使用阿里云提供的 API、SDK 接口或者 OSS 迁移工具轻松地将海量数据移入或移出阿里云 OSS。数据存储到阿里云 OSS 以后,您可以选择标准存储(Standard)作为移动应用、大型网站、图片分享或热点音视频的主要存储方式,也可以选择成本更低、存储期限更长的低频访问存储(Infrequent Access)和归档存储(Archive)作为不经常访问数据的存储方式。

相关概念

  • 存储类型(Storage Class)

    OSS 提供标准、低频访问、归档三种存储类型,全面覆盖从热到冷的各种数据存储场景。其中标准存储类型提供高可靠、高可用、高性能的对象存储服务,能够支持频繁的数据访问;低频访问存储类型适合长期保存不经常访问的数据(平均每月访问频率 1 到 2 次),存储单价低于标准类型;归档存储类型适合需要长期保存(建议半年以上)的归档数据,在三种存储类型中单价最低。详情请参见存储类型介绍。

  • 存储空间(Bucket)

    存储空间是您用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。您可以根据实际需求,创建不同类型的存储空间来存储不同的数据。创建存储空间请参见创建存储空间。

  • 对象/文件(Object)

    对象是 OSS 存储数据的基本单元,也被称为 OSS 的文件。对象由元信息(Object Meta)、用户数据(Data)和文件名(Key)组成。对象由存储空间内部唯一的 Key 来标识。对象元信息是一组键值对,表示了对象的一些属性,例如最后修改时间、大小等信息,同时您也可以在元信息中存储一些自定义的信息。

  • 地域(Region)

    地域表示 OSS 的数据中心所在物理位置。您可以根据费用、请求来源等选择合适的地域创建 Bucket。详情请参见 OSS 已开通的Region。

  • 访问域名(Endpoint)

    Endpoint 表示 OSS 对外服务的访问域名。OSS 以 HTTP RESTful API 的形式对外提供服务,当访问不同地域的时候,需要不同的域名。通过内网和外网访问同一个地域所需要的域名也是不同的。具体的内容请参见各个 Region 对应的 Endpoint。

  • 访问密钥(AccessKey)

    AccessKey(简称 AK)指的是访问身份验证中用到的 AccessKeyId 和 AccessKeySecret。OSS 通过使用 AccessKeyId 和 AccessKeySecret 对称加密的方法来验证某个请求的发送者身份。AccessKeyId 用于标识用户;AccessKeySecret 是用户用于加密签名字符串和 OSS 用来验证签名字符串的密钥,必须保密。获取 AccessKey 的方法请参见创建 AccessKey。

相关服务

您把数据存储到 OSS 以后,就可以使用阿里云提供的其他产品和服务对其进行相关操作。

以下是您会经常使用到的阿里云产品和服务:

  • 图片处理(IMG):对存储在 OSS 上的图片进行格式转换、缩放、裁剪、旋转、添加水印等各种操作。请参见快速使用 OSS 图片处理服务。
  • 云服务器(ECS):提供简单高效、处理能力可弹性伸缩的云端计算服务。请参见 ECS 产品详情页面。
  • 内容分发网络(CDN):将 OSS 资源缓存到各区域的边缘节点,利用边缘节点缓存的数据,提升同一个文件,被边缘节点客户大量重复下载的体验。请参见 CDN 产品详情页面。
  • E-MapReduce:构建于 ECS 上的大数据处理的系统解决方案,基于开源的 Apache Hadoop 和 Apache Spark,方便您分析和处理自己的数据。请参见 E-MapReduce 产品详情页面。
  • 媒体处理:将存储于 OSS 的音视频转码成适合在 PC、TV 以及移动终端上播放的格式。并基于海量数据深度学习,对音视频的内容、文字、语音、场景多模态分析,实现智能审核、内容理解、智能编辑。请参见媒体处理产品详情页面。

管理 OSS

  • 通过 OSS 控制台管理 OSS

    OSS 提供了 Web 服务页面,您可以登录 OSS 管理控制台,管理您的 OSS。详情请参见控制台用户指南。

  • 通过 API 或 SDK 管理 OSS

    OSS 提供 RESTful API 和各种语言的 SDK 开发包,方便您快速进行二次开发。详情请参见 OSS API 参考和 OSS SDK 参考。

  • 通过工具管理 OSS

    OSS 提供各类型的管理工具,您可以通过工具管理您的 OSS。详情请参见 OSS 常用工具。

 基本概念

存储空间(Bucket)

存储空间是用户用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。用户可以根据实际需求,创建不同类型的存储空间来存储不同的数据。

  • 同一个存储空间的内部是扁平的,没有文件系统的目录等概念,所有的对象都直接隶属于其对应的存储空间。
  • 每个用户可以拥有多个存储空间。
  • 存储空间的名称在 OSS 范围内必须是全局唯一的,一旦创建之后无法修改名称。
  • 存储空间内部的对象数目没有限制。

存储空间的命名规范如下:

  • 只能包括小写字母、数字和短横线(-)。
  • 必须以小写字母或者数字开头和结尾。
  • 长度必须在 3–63 字节之间。

对象/文件(Object)

对象是 OSS 存储数据的基本单元,也被称为 OSS 的文件。对象由元信息(Object Meta),用户数据(Data)和文件名(Key)组成。对象由存储空间内部唯一的 Key 来标识。对象元信息是一组键值对,表示了对象的一些属性,比如最后修改时间、大小等信息,同时用户也可以在元信息中存储一些自定义的信息。

对象的生命周期是从上传成功到被删除为止。在整个生命周期内,只有通过追加上传的 Object 可以继续通过追加上传写入数据,其他上传方式上传的 Object 内容无法编辑,您可以通过重复上传同名的对象来覆盖之前的对象。

对象的命名规范如下:

  • 使用 UTF-8 编码。
  • 长度必须在 1–1023 字节之间。
  • 不能以正斜线(/)或者反斜线(\)开头。
     
    说明 对象名称需要区分大小写。如无特殊说明,本文档中的对象、文件称谓等同于 Object。

Region(地域)

Region 表示 OSS 的数据中心所在物理位置。用户可以根据费用、请求来源等选择合适的地域创建 Bucket。一般来说,距离用户更近的 Region 访问速度更快。详情请查看 OSS 已经开通的 Region。

Region 是在创建 Bucket 的时候指定的,一旦指定之后就不允许更改。该 Bucket 下所有的 Object 都存储在对应的数据中心,目前不支持 Object 级别的 Region 设置。

Endpoint(访问域名)

Endpoint 表示 OSS 对外服务的访问域名。OSS 以 HTTP RESTful API 的形式对外提供服务,当访问不同的 Region 的时候,需要不同的域名。通过内网和外网访问同一个 Region 所需要的 Endpoint 也是不同的。例如杭州 Region 的外网 Endpoint 是 oss-cn-hangzhou.aliyuncs.com,内网 Endpoint 是 oss-cn-hangzhou-internal.aliyuncs.com。具体的内容请参见各个 Region 对应的 Endpoint。

AccessKey(访问密钥)

AccessKey(简称 AK)指的是访问身份验证中用到的 AccessKeyId 和 AccessKeySecret。OSS 通过使用 AccessKeyId 和 AccessKeySecret 对称加密的方法来验证某个请求的发送者身份。AccessKeyId 用于标识用户;AccessKeySecret 是用户用于加密签名字符串和 OSS 用来验证签名字符串的密钥,必须保密。对于 OSS 来说,AccessKey 的来源有:

  • Bucket 的拥有者申请的 AccessKey。
  • 被 Bucket 的拥有者通过 RAM 授权给第三方请求者的 AccessKey。
  • 被 Bucket 的拥有者通过 STS 授权给第三方请求者的 AccessKey。

创建OSS

 

 

 

 创建子用户

 

 原生SDK上传

    @Test
    void upload() {
        // Endpoint以杭州为例,其它Region请按实际情况填写。
        String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
        // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
        String accessKeyId = "LTAI4FzQD4543kCervA5vy";
        String accessKeySecret = "wmCFWidrtvJK08ZvAIukf0OexyGRZ";

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

        // 创建PutObjectRequest对象。
        String content = "C:\\Users\\asus\\Desktop\\node-disk-manager-amd64.tar";
        // <yourObjectName>表示上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
        PutObjectRequest putObjectRequest = new PutObjectRequest("gulimall-dalianpai", "k8s.tar", new ByteArrayInputStream(content.getBytes()));

        // 如果需要上传时设置存储类型与访问权限,请参考以下示例代码。
        // ObjectMetadata metadata = new ObjectMetadata();
        // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
        // metadata.setObjectAcl(CannedAccessControlList.Private);
        // putObjectRequest.setMetadata(metadata);

        // 上传字符串。
        ossClient.putObject(putObjectRequest);

        // 关闭OSSClient。
        ossClient.shutdown();
    }  

 与SpringCloud整合上传,注意这个官网API,我在上传的时候,流会被截断,上传的不完整。

spring:
  application:
    name: gulimall-product
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.1.118:8848
      config:
        server-addr: 192.168.1.118:8848
        namespace: 1a99a442-e66b-4fa6-8da7-e08cab3727de
        group: dev
        file-extension: yaml

    alicloud:
      access-key: LTAI4Fz32kWpSNkCervA5vy
      secret-key: wmCFWidt8YvJK32vAIukf0OexyGRZ
      oss:
        endpoint: oss-cn-beijing.aliyuncs.com
    @Test
    void upload2() throws FileNotFoundException {
        // 创建PutObjectRequest对象。
        InputStream fileInputStream = new FileInputStream("C:\\Users\\asus\\Desktop\\荣哥v1.docx");
        ossClient.putObject("gulimall-dalianpai-oss", "荣哥v1.docx",fileInputStream);
        ossClient.shutdown();
        System.out.println("上传成功");
    }

 

posted @ 2020-05-28 22:04  天宇轩-王  阅读(1438)  评论(0编辑  收藏  举报