OSS提供三种存储类型,本文介绍归档存储类型(Archive)的存储空间的创建与使用。

创建归档存储类型的存储空间

您可以通过控制台、API/SDK和命令行工具创建归档存储类型的存储空间。

  • 通过控制台创建

    控制台创建Archive类型的bucket,存储类型选择归档,如下图所示。



  • 通过API/SDK创建

    以Java SDK为例:

    OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    CreateBucketRequest createBucketRequest=new CreateBucketRequest(bucketName);
    // 设置bucket权限为公共读,默认是私有读写 createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
    // 设置bucket存储类型为归档类型,默认是标准类型
    createBucketRequest.setStorageClass(StorageClass.Archive);
    ossClient.createBucket(createBucketRequest);
    createBucketRequest.setStorageClass(StorageClass.Archive);即设置创建的bucket的存储类型为归档存储类型。
  • 通过OSS命令行工具创建
    以OSSUtil为例:
    ./ossutil mb oss://[bucket name] --storage-class=Archive
    [bucket name]为需要创建的bucket名称。指定--storage-class的参数为Archive,用来创建归档存储类型的bucket。

使用归档存储类型

  • 上传数据

    归档存储类型bucket支持PUT Object/Multipart两种上传方式,不支持APPEND追加写入。

    基于PUT Object/Multipart开发的上传应用可以直接使用归档存储类型。

  • 下载数据

    归档存储类型数据读取与标准存储类型和低频访问类型的方式有一些区别。所有存储的归档类型数据在读取前需要先执行restore操作解冻到可读取状态,解冻过程需要1分钟时间。

    归档文件的状态变换过程如下:

    1. 归档类型的文件初始时处于冷冻状态。
    2. 提交解冻(restore)操作后,服务端执行解冻,文件处于解冻中状态。
    3. 完成解冻后,可以读取文件。
    4. 解冻状态默认持续1天,最多延长7天,之后文件又回到冷冻状态。

解冻方式有如下几种:

  • 使用控制台解冻

    对需要读取的文件,执行解冻操作,解冻过程预计花费1分钟。期间可以查询到object处于解冻中状态。



  • 使用API/SDK解冻

    以Java SDK举例, 调用restoreObject方法进行object解冻:

    ObjectMetadata objectMetadata = ossClient.getObjectMetadata(bucketName, key);
    // check whether the object is archive class
    StorageClass storageClass = objectMetadata.getObjectStorageClass();
    if (storageClass == StorageClass.Archive) {
        // restore object
        ossClient.restoreObject(bucketName, key);
        // wait for restore completed
        do {
            Thread.sleep(1000);
            objectMetadata = ossClient.getObjectMetadata(bucketName, key);
        } while (!objectMetadata.isRestoreCompleted());
    }
    // get restored object
    OSSObject ossObject = ossClient.getObject(bucketName, key);
    ossObject.getObjectContent().close();
  • 使用OSS命令行工具解冻
    以OSSUtil为例:
    ./ossutil restore oss://[Bucket name]/[Object name]

    [Bucket name][Object name]为需要做解冻操作的bucket和object名称。