日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

轉換文件存儲類型

重要

本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。

OSS支持標準、低頻訪問、歸檔、冷歸檔、深度冷歸檔多種存儲類型,您可以通過生命周期規則或者CopyObject的方式隨時轉換文件(Object)的存儲類型。

警告

對開通了OSS-HDFS服務的Bucket,建議不要修改OSS-HDFS的數據存儲目錄.dlsdata/下任意Object的存儲類型。

如果您將.dlsdata/下任意Object的存儲類型修改為低頻類型時,通過OSS-HDFS可正常訪問數據。如果您將Object存儲類型修改為歸檔、冷歸檔、深度冷歸檔后,通過OSS-HDFS無法訪問數據。如需訪問,您需要對數據進行解凍操作,解凍完成后再嘗試訪問數據。

通過生命周期規則自動轉換Object的存儲類型

基于最后一次修改時間的存儲類型轉換

  • 本地冗余存儲(LRS)本地冗余

    本地冗余類型文件轉換規則如下:

    • 標準存儲(LRS)類型可轉換為低頻訪問(LRS)、歸檔存儲(LRS)、冷歸檔存儲(LRS)或者深度冷歸檔存儲(LRS)類型。

    • 低頻訪問(LRS)類型可轉換為歸檔存儲(LRS)、冷歸檔存儲(LRS)類型或者深度冷歸檔存儲(LRS)類型。

    • 歸檔存儲(LRS)類型可轉換為冷歸檔存儲(LRS)類型或者深度冷歸檔存儲(LRS)類型。

    • 冷歸檔存儲(LRS)類型可轉換為深度冷歸檔存儲(LRS)類型。

    當Bucket同時配置了轉換為低頻訪問、轉換為歸檔存儲、轉換為冷歸檔存儲以及轉換為深度冷歸檔存儲的策略,其轉換周期必須滿足以下條件:

    轉換為低頻訪問的周期<轉換為歸檔的周期<轉換為冷歸檔的周期<轉換為深度冷歸檔的周期

  • 同城冗余存儲(ZRS)同城

    同城冗余類型文件轉換規則如下:

    • 標準存儲(ZRS)類型可轉換為低頻訪問(ZRS)類型、歸檔存儲(ZRS)類型、冷歸檔存儲(LRS)類型和深度冷歸檔存儲(LRS)類型。

    • 低頻訪問(ZRS)類型可轉換為歸檔存儲(ZRS)類型、冷歸檔存儲(LRS)類型和深度冷歸檔存儲(LRS)類型。

    • 歸檔存儲(ZRS)類型可轉換為冷歸檔存儲(LRS)類型和深度冷歸檔存儲(LRS)類型。

    • 冷歸檔存儲(LRS)類型可轉換為深度冷歸檔存儲(LRS)類型。

更多信息,請參見基于最后一次修改時間的生命周期規則

基于最后一次訪問時間的存儲類型轉換

重要

如果您需要將Object從標準存儲或低頻訪問類型轉換為歸檔、冷歸檔或深度冷歸檔存儲類型,請提交工單申請轉換為歸檔、冷歸檔或深度冷歸檔類型的權限,申請通過后您需要指定轉換的目標存儲類型。

工單申請通過后,如果您基于最后一次訪問時間策略將Object從標準存儲或低頻訪問類型轉為歸檔、冷歸檔或深度冷歸檔類型,則Bucket中歸檔、冷歸檔或深度冷歸檔類型Object的最后一次訪問時間默認為該Bucket開啟訪問跟蹤的時間。

  • 本地冗余存儲(LRS)

    1.jpg

    本地冗余類型文件轉換規則如下:

    • 標準存儲(LRS)類型可轉換為低頻訪問(LRS)、歸檔存儲(LRS)、冷歸檔存儲(LRS)或者深度冷歸檔存儲(LRS)類型。

    • 標準存儲(LRS)類型轉為低頻訪問(LRS)后,還可以選擇當Object被訪問后是否自動轉回標準存儲(LRS)類型。

    • 低頻訪問(LRS)類型可轉換為歸檔存儲(LRS)、冷歸檔存儲(LRS)類型或者深度冷歸檔存儲(LRS)類型。

    • 歸檔存儲(LRS)類型可轉換為冷歸檔存儲(LRS)類型或者深度冷歸檔存儲(LRS)類型。

    • 冷歸檔存儲(LRS)類型可轉換為深度冷歸檔存儲(LRS)類型。

  • 同城冗余存儲(ZRS)

    2.jpg

    同城冗余類型文件轉換規則如下:

    • 標準存儲(ZRS)類型可轉換為低頻訪問(ZRS)類型、歸檔存儲(ZRS)類型、冷歸檔存儲(LRS)類型和深度冷歸檔存儲(LRS)類型。

    • 標準存儲(ZRS)類型轉為低頻訪問(ZRS)后,還可以選擇當Object被訪問后是否自動轉回標準存儲(ZRS)類型。

    • 低頻訪問(ZRS)類型可轉換為歸檔存儲(ZRS)類型、冷歸檔存儲(LRS)類型和深度冷歸檔存儲(LRS)類型。

    • 歸檔存儲(ZRS)類型可轉換為冷歸檔存儲(LRS)類型和深度冷歸檔存儲(LRS)類型。

    • 冷歸檔存儲(LRS)類型可轉換為深度冷歸檔存儲(LRS)類型。

更多信息,請參見基于最后一次訪問時間的生命周期規則

通過生命周期規則轉換存儲類型操作方式

您可以通過多種方式設置生命周期規則。生命周期規則可用于將多個Object在指定時間內轉儲為指定存儲類型,或者將過期的Object和碎片刪除。您可以結合以下示例按需選擇通過生命周期規則將Object轉儲為指定存儲類型。

使用OSS管理控制臺

  1. 登錄OSS管理控制臺

  2. 單擊Bucket 列表,然后單擊目標Bucket名稱。

  3. 在左側導航欄, 選擇數據管理 > 生命周期

  4. 可選:如果您需要創建基于最后一次訪問時間策略的生命周期規則,請在生命周期頁面,打開啟用訪問跟蹤開關。

  5. 生命周期頁面,單擊創建規則

  6. 創建生命周期規則面板,按如下說明配置生命周期規則。

    • 存儲空間未開啟版本控制

      區域

      配置項

      說明

      基礎設置

      狀態

      設置生命周期規則的狀態,可選擇啟動禁用

      • 啟動生命周期規則后,將按照配置的生命周期規則轉換數據存儲類型或刪除數據。

      • 禁用生命周期規則后,將中斷生命周期任務。

      策略

      選擇生命周期規則作用的Object。您可以選擇按前綴匹配配置到整個Bucket

      說明

      選擇按前綴匹配時,需要填寫前綴的完整路徑。例如,您希望僅作用于src/dir1下的所有文件,則前綴需要填寫為src/dir1,僅填寫dir1則不生效。

      是否允許前綴重疊

      OSS默認會檢查各個生命周期規則的前綴是否重疊。例如,您設置了以下兩條包含重疊前綴的生命周期規則:

      • 規則1

        指定該Bucket內所有前綴為dir1/的Object在距離最后一次修改時間180天后刪除。

      • 規則2

        指定該Bucket內所有前綴為dir1/dir2/的Object在距離最后一次修改時間30天后轉低頻訪問類型,60天后刪除。

      在配置規則2時未選中該選項的情況下,因后臺檢測到dir1/dir2/目錄下的Object同時匹配兩條刪除規則,因此會拒絕設置規則2,并報錯Overlap for same action type Expiration.

      在配置規則2時選中該選項的情況下,dir1/dir2/下的Object會在30天后轉低頻訪問類型,60天后刪除。dir1/下的其他Object會在180天刪除。

      說明

      如果配置了多條規則,且其中一條為基于整個Bucket的規則時,會被視為前綴重疊的情況。

      前綴

      輸入規則要匹配的Object名稱的前綴。

      • 前綴設置為img,表示匹配名稱以img開頭的所有Object,例如imgtest.png、img/example.jpg等。

      • 前綴設置為img/,表示匹配名稱以img/開頭的所有Object,例如img/example.jpg、img/test.jpg等。

      標簽

      生命周期規則僅針對擁有指定標簽Object生效。

      • 如果沒有設置前綴,只設置了標簽,且標簽的key為a,value為1。則該規則將匹配Bucket內所有標簽為a=1的Object。

      • 如果設置了前綴,前綴設置為img,同時設置了標簽,標簽的key為a,value為1,則該規則將匹配Bucket內所有名稱以img開頭,標簽為a=1的Object。

      更多信息,請參見對象標簽

      NOT

      NOT選項用于設置生命周期規則對指定前綴和標簽的Object不生效。

      重要
      • 開啟NOT選項時,前綴和標簽必須至少存在一項,即同時設置前綴和標簽或者只設置前綴或標簽。

      • NOT語義定義標簽中的key不支持與標簽配置項中定義的key相同。

      • 開啟NOT選項后,不支持設置碎片過期策略。

      文件大小

      指定生命周期規則生效的文件大小。

      • 指定最小文件:生命周期規則對大于該值的文件大小生效。取值大于0 B,小于5 TB。

      • 指定最大文件:生命周期規則對小于該值的文件大小生效。取值大于0 B,小于等于5 TB。

      重要

      如果在同一條生命周期中,同時配置了指定最小文件和指定最大文件:

      • 確保指定最大文件的值大于指定最小文件的值。

      • 不支持配置碎片執行策略。

      • 不支持配置清除刪除標記策略。

      文件執行策略設置

      文件時間策略

      選擇Object過期策略,可選擇指定天數指定日期不啟用。選擇不啟用時,文件過期策略不生效。

      生命周期管理規則

      配置轉換Object存儲類型或者刪除過期Object的規則,可選擇低頻訪問歸檔存儲冷歸檔存儲深度冷歸檔存儲數據刪除

      例如,當您將文件時間策略設置為指定日期,并將日期設置為2023年9月24日,則最后一次修改時間在2023年9月24日之前的Object會被自動刪除,且刪除后不可恢復。

      碎片執行策略設置

      碎片過期策略

      配置碎片執行策略。如果選中了標簽,則無法配置該選項。您可以選擇按指定天數指定日期執行碎片過期策略,也可以選擇不啟用碎片過期策略。當選擇不啟用時,碎片過期策略不生效。

      重要

      生命周期規則至少包含文件過期策略或碎片過期策略。

      碎片規則

      根據碎片過期策略選擇的過期天數或過期日期設定碎片何時過期,碎片過期后會被自動刪除,且刪除后不可恢復。

    • 存儲空間已開啟版本控制

      開啟版本控制后,基礎設置碎片執行策略設置區域涉及的配置項,與未開啟版本控制的配置方法相同。以下表格僅介紹與未開啟版本控制相比,開啟版本控制后配置項存在的差異。

      區域

      配置項

      說明

      當前版本文件執行策略設置

      清理對象刪除標記

      開啟版本控制后,清除策略中增加了清理對象刪除標記選項,其他選項與未開啟版本控制時相同。

      選擇此選項后,如果當前Object僅有一個版本且為刪除標記時,則OSS將刪除過期Object的刪除標記。如果當前Object有多個版本,且Object的最新版本為刪除標記時,則OSS將保留該刪除標記。關于刪除標記的更多信息,請參見刪除標記

      重要

      當有歷史版本存在時,該規則不會清理對象刪除標記。因此建議及時清理對象刪除標記和非必要的歷史版本,否則Bucket內因存儲過多的刪除標記,導致List性能下降。

      歷史版本文件執行策略設置

      文件時間策略

      設置歷史版本文件的過期策略,可選擇指定天數不啟用。當選擇不啟用時,文件過期策略不生效。

      生命周期管理規則

      設定一個過期天數N,歷史版本的Object會在其被轉換為歷史版本的N天后過期,并在過期的第二天執行指定操作。例如設置為30,則在2023年09月01日被轉為歷史版本的Object會在2023年10月01日被轉換為指定存儲類型或被刪除。

      重要

      您可以通過Object下一個版本的最后一次修改時間確定 Object被轉為歷史版本的時間。

  7. 單擊確定

    生命周期規則保存成功后,您可以在策略列表中查看已設置的生命周期規則。

使用阿里云SDK

以下僅列舉常見SDK的配置生命周期規則的代碼示例。關于其他SDK的配置生命周期規則的代碼示例,請參見簡介

Java

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.common.utils.DateUtil;
import com.aliyun.oss.model.LifecycleRule;
import com.aliyun.oss.model.SetBucketLifecycleRequest;
import com.aliyun.oss.model.StorageClass;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Endpoint以華東1(杭州)為例,其它Region請按實際情況填寫。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填寫Bucket名稱,例如examplebucket。
        String bucketName = "examplebucket";

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

        try {
            // 創建SetBucketLifecycleRequest。
            SetBucketLifecycleRequest request = new SetBucketLifecycleRequest(bucketName);

            // 設置規則ID。
            String ruleId0 = "rule0";
            // 設置文件匹配前綴。
            String matchPrefix0 = "A0/";
            // 設置要匹配的標簽。
            Map<String, String> matchTags0 = new HashMap<String, String>();
            // 依次填寫要匹配標簽的鍵(例如owner)和值(例如John)。
            matchTags0.put("owner", "John");


            String ruleId1 = "rule1";
            String matchPrefix1 = "A1/";
            Map<String, String> matchTags1 = new HashMap<String, String>();
            matchTags1.put("type", "document");

            String ruleId2 = "rule2";
            String matchPrefix2 = "A2/";

            String ruleId3 = "rule3";
            String matchPrefix3 = "A3/";

            String ruleId4 = "rule4";
            String matchPrefix4 = "A4/";

            String ruleId5 = "rule5";
            String matchPrefix5 = "A5/";

            String ruleId6 = "rule6";
            String matchPrefix6 = "A6/";

            // 距最后修改時間3天后過期。
            LifecycleRule rule = new LifecycleRule(ruleId0, matchPrefix0, LifecycleRule.RuleStatus.Enabled, 3);
            rule.setTags(matchTags0);
            request.AddLifecycleRule(rule);

            // 指定日期之前創建的文件過期。
            rule = new LifecycleRule(ruleId1, matchPrefix1, LifecycleRule.RuleStatus.Enabled);
            rule.setCreatedBeforeDate(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
            rule.setTags(matchTags1);
            request.AddLifecycleRule(rule);

            // 分片3天后過期。
            rule = new LifecycleRule(ruleId2, matchPrefix2, LifecycleRule.RuleStatus.Enabled);
            LifecycleRule.AbortMultipartUpload abortMultipartUpload = new LifecycleRule.AbortMultipartUpload();
            abortMultipartUpload.setExpirationDays(3);
            rule.setAbortMultipartUpload(abortMultipartUpload);
            request.AddLifecycleRule(rule);

            // 指定日期之前的分片過期。
            rule = new LifecycleRule(ruleId3, matchPrefix3, LifecycleRule.RuleStatus.Enabled);
            abortMultipartUpload = new LifecycleRule.AbortMultipartUpload();
            abortMultipartUpload.setCreatedBeforeDate(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
            rule.setAbortMultipartUpload(abortMultipartUpload);
            request.AddLifecycleRule(rule);

            // 距最后修改時間10天后轉低頻訪問存儲類型,距最后修改時間30天后轉歸檔存儲類型。
            rule = new LifecycleRule(ruleId4, matchPrefix4, LifecycleRule.RuleStatus.Enabled);
            List<LifecycleRule.StorageTransition> storageTransitions = new ArrayList<LifecycleRule.StorageTransition>();
            LifecycleRule.StorageTransition storageTransition = new LifecycleRule.StorageTransition();
            storageTransition.setStorageClass(StorageClass.IA);
            storageTransition.setExpirationDays(10);
            storageTransitions.add(storageTransition);
            storageTransition = new LifecycleRule.StorageTransition();
            storageTransition.setStorageClass(StorageClass.Archive);
            storageTransition.setExpirationDays(30);
            storageTransitions.add(storageTransition);
            rule.setStorageTransition(storageTransitions);
            request.AddLifecycleRule(rule);

            // 指定最后修改日期在2022年10月12日之前的文件轉為歸檔存儲。
            rule = new LifecycleRule(ruleId5, matchPrefix5, LifecycleRule.RuleStatus.Enabled);
            storageTransitions = new ArrayList<LifecycleRule.StorageTransition>();
            storageTransition = new LifecycleRule.StorageTransition();

            storageTransition.setCreatedBeforeDate(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));

            storageTransition.setStorageClass(StorageClass.Archive);
            storageTransitions.add(storageTransition);
            rule.setStorageTransition(storageTransitions);
            request.AddLifecycleRule(rule);

            // rule6針對版本控制狀態下的Bucket。
            rule = new LifecycleRule(ruleId6, matchPrefix6, LifecycleRule.RuleStatus.Enabled);
            // 設置Object相對最后修改時間365天之后自動轉為歸檔文件。
            storageTransitions = new ArrayList<LifecycleRule.StorageTransition>();
            storageTransition = new LifecycleRule.StorageTransition();
            storageTransition.setStorageClass(StorageClass.Archive);
            storageTransition.setExpirationDays(365);
            storageTransitions.add(storageTransition);
            rule.setStorageTransition(storageTransitions);
            // 設置自動移除過期刪除標記。
            rule.setExpiredDeleteMarker(true);
            // 設置非當前版本的object距最后修改時間10天之后轉為低頻訪問類型。
            LifecycleRule.NoncurrentVersionStorageTransition noncurrentVersionStorageTransition =
                    new LifecycleRule.NoncurrentVersionStorageTransition().withNoncurrentDays(10).withStrorageClass(StorageClass.IA);
            // 設置非當前版本的Object距最后修改時間20天之后轉為歸檔類型。
            LifecycleRule.NoncurrentVersionStorageTransition noncurrentVersionStorageTransition2 =
                    new LifecycleRule.NoncurrentVersionStorageTransition().withNoncurrentDays(20).withStrorageClass(StorageClass.Archive);
            // 設置非當前版本Object 30天后刪除。
            LifecycleRule.NoncurrentVersionExpiration noncurrentVersionExpiration = new LifecycleRule.NoncurrentVersionExpiration().withNoncurrentDays(30);
            List<LifecycleRule.NoncurrentVersionStorageTransition> noncurrentVersionStorageTransitions = new ArrayList<LifecycleRule.NoncurrentVersionStorageTransition>();
            noncurrentVersionStorageTransitions.add(noncurrentVersionStorageTransition2);
            rule.setStorageTransition(storageTransitions);
            rule.setNoncurrentVersionExpiration(noncurrentVersionExpiration);
            rule.setNoncurrentVersionStorageTransitions(noncurrentVersionStorageTransitions);
            request.AddLifecycleRule(rule);

            // 發起設置生命周期規則請求。
            ossClient.setBucketLifecycle(request);

            // 查看生命周期規則。
            List<LifecycleRule> listRules = ossClient.getBucketLifecycle(bucketName);
            for(LifecycleRule rules : listRules){
                System.out.println("ruleId="+rules.getId()+", matchPrefix="+rules.getPrefix());
            }
        } 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();
            }
        }
    }
}

PHP

<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;
use OSS\Model\LifecycleConfig;
use OSS\Model\LifecycleRule;
use OSS\Model\LifecycleAction;

// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
$provider = new EnvironmentVariableCredentialsProvider();
// Endpoint以華東1(杭州)為例,其它Region請按實際情況填寫。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 填寫存儲空間名稱。
$bucket= "examplebucket";

// 設置規則ID和文件前綴。
$ruleId0 = "rule0";
$matchPrefix0 = "A0/";
$ruleId1 = "rule1";
$matchPrefix1 = "A1/";

$lifecycleConfig = new LifecycleConfig();
$actions = array();
// 距最后修改時間3天后過期。
$actions[] = new LifecycleAction(OssClient::OSS_LIFECYCLE_EXPIRATION, OssClient::OSS_LIFECYCLE_TIMING_DAYS, 3);
$lifecycleRule = new LifecycleRule($ruleId0, $matchPrefix0, "Enabled", $actions);
$lifecycleConfig->addRule($lifecycleRule);
$actions = array();
// 指定日期之前創建的文件過期。
$actions[] = new LifecycleAction(OssClient::OSS_LIFECYCLE_EXPIRATION, OssClient::OSS_LIFECYCLE_TIMING_DATE, '2022-10-12T00:00:00.000Z');
$lifecycleRule = new LifecycleRule($ruleId1, $matchPrefix1, "Enabled", $actions);
$lifecycleConfig->addRule($lifecycleRule);
try {
    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
    );
    $ossClient = new OssClient($config);

    $ossClient->putBucketLifecycle($bucket, $lifecycleConfig);
} catch (OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}
print(__FUNCTION__ . ": OK" . "\n");

Node.js

const OSS = require('ali-oss')

const client = new OSS({
  // yourregion填寫Bucket所在地域。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
  region: 'yourregion',
  // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // 填寫存儲空間名稱。
  bucket: 'yourbucketname'
});

async function getBucketLifecycle () {
  try {
    const result = await client.getBucketLifecycle('Yourbucketname');
    console.log(result.rules); // 獲取生命周期規則。

    rules.forEach(rule => {
      console.log(rule.id) //  查看生命周期規則ID。 
      console.log(rule.status) // 查看生命周期規則狀態。
      console.log(rule.tags) // 查看生命周期規則標簽。
      console.log(rule.expiration.days) // 查看過期天數規則。
      console.log(rule.expiration.createdBeforeDate) // 查看過期日期規則。
      // 查看過期分片規則。
      console.log(rule.abortMultipartUpload.days || rule.abortMultipartUpload.createdBeforeDate)
      // 查看存儲類型轉換規則。
      console.log(rule.transition.days || rule.transition.createdBeforeDate) // 查看存儲類型轉換時間。
      console.log(rule.transition.storageClass) // 轉換存儲類型。
      // 查看是否自動刪除過期刪除標記。
      console.log(rule.transition.expiredObjectDeleteMarker)
      // 查看非當前版本Object存儲類型轉換規則。
      console.log(rule.noncurrentVersionTransition.noncurrentDays) // 查看非當前版本Object存儲類型轉換時間。
      console.log(rule.noncurrentVersionTransition.storageClass) // 查看非當前版本Object轉換的存儲類型。
    })
  } catch (e) {
    console.log(e);
  }
}
getBucketLifecycle();

Python

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import datetime
from oss2.models import (LifecycleExpiration, LifecycleRule, 
                        BucketLifecycle,AbortMultipartUpload, 
                        TaggingRule, Tagging, StorageTransition,
                        NoncurrentVersionStorageTransition,
                        NoncurrentVersionExpiration)

# 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# 填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
# 填寫Bucket名稱,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')

# 設置Object距其最后修改時間3天后過期。
rule1 = LifecycleRule('rule1', 'tests/',
                      status=LifecycleRule.ENABLED,
                      expiration=LifecycleExpiration(days=3))

# 設置Object過期規則,指定日期之前創建的文件過期。
rule2 = LifecycleRule('rule2', 'tests2/',
                      status=LifecycleRule.ENABLED,
expiration=LifecycleExpiration(created_before_date=datetime.date(2023, 12, 12)))

# 設置分片過期規則,分片3天后過期。
rule3 = LifecycleRule('rule3', 'tests3/',
                      status=LifecycleRule.ENABLED,
            abort_multipart_upload=AbortMultipartUpload(days=3))

# 設置分片過期規則,指定日期之前的分片過期。
rule4 = LifecycleRule('rule4', 'tests4/',
                      status=LifecycleRule.ENABLED,
                      abort_multipart_upload = AbortMultipartUpload(created_before_date=datetime.date(2022, 12, 12)))

# 設置存儲類型轉換規則,指定Object在其最后修改時間20天之后轉為低頻訪問類型,在其最后修改時間30天之后轉為歸檔類型。
rule5 = LifecycleRule('rule5', 'tests5/',
                      status=LifecycleRule.ENABLED,
                      storage_transitions=[StorageTransition(days=20,storage_class=oss2.BUCKET_STORAGE_CLASS_IA),
                            StorageTransition(days=30,storage_class=oss2.BUCKET_STORAGE_CLASS_ARCHIVE)])

# 設置匹配的標簽。
tagging_rule = TaggingRule()
tagging_rule.add('key1', 'value1')
tagging_rule.add('key2', 'value2')
tagging = Tagging(tagging_rule)

# 設置存儲類型轉換規則,指定Object在其最后修改時間超過365天后轉為ARCHIVE類型。 
# rule6與以上幾個規則不同的是它指定了匹配的標簽,同時擁有key1=value1,key2=value2兩個標簽的object才會匹配此規則。
rule6 = LifecycleRule('rule6', 'tests6/',
                      status=LifecycleRule.ENABLED,
                      storage_transitions=[StorageTransition(created_before_date=datetime.date(2022, 12, 12),storage_class=oss2.BUCKET_STORAGE_CLASS_IA)],
                      tagging = tagging)

# rule7針對版本控制狀態下的Bucket。
# 設置Object在其最后修改時間365天之后自動轉為ARCHIVE類型。
# 設置自動移除過期刪除標記。
# 設置非當前版本Object 12天后轉為IA類型。
# 設置非當前版本Object 20天后轉為ARCHIVE類型。
# 設置非當前版本Object 30天后刪除。
rule7 = LifecycleRule('rule7', 'tests7/',
              status=LifecycleRule.ENABLED,
              storage_transitions=[StorageTransition(days=365, storage_class=oss2.BUCKET_STORAGE_CLASS_ARCHIVE)], 
              expiration=LifecycleExpiration(expired_detete_marker=True),
              noncurrent_version_sotrage_transitions = 
                    [NoncurrentVersionStorageTransition(12, oss2.BUCKET_STORAGE_CLASS_IA),
                     NoncurrentVersionStorageTransition(20, oss2.BUCKET_STORAGE_CLASS_ARCHIVE)],
              noncurrent_version_expiration = NoncurrentVersionExpiration(30))

lifecycle = BucketLifecycle([rule1, rule2, rule3, rule4, rule5, rule6, rule7])

bucket.put_bucket_lifecycle(lifecycle)

C#

using Aliyun.OSS;
using Aliyun.OSS.Common;
// 填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// 填寫Bucket名稱,例如examplebucket。
var bucketName = "examplebucket";

// 創建OSSClient實例。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
    var setBucketLifecycleRequest = new SetBucketLifecycleRequest(bucketName);
    // 創建第1條生命周期規則。
    LifecycleRule lcr1 = new LifecycleRule()
    {
        ID = "delete obsoleted files",
        Prefix = "obsoleted/",
        Status = RuleStatus.Enabled,
        ExpriationDays = 3,
        Tags = new Tag[1]
    };
    // 設置標簽。
    var tag1 = new Tag
    {
        Key = "project",
        Value = "projectone"
    };

    lcr1.Tags[0] = tag1;

    // 創建第2條生命周期規則。
    LifecycleRule lcr2 = new LifecycleRule()
    {
        ID = "delete temporary files",
        Prefix = "temporary/",
        Status = RuleStatus.Enabled,
        ExpriationDays = 20,
        Tags = new Tag[1]         
    };
    // 設置標簽。
    var tag2 = new Tag
    {
        Key = "user",
        Value = "jsmith"
    };
    lcr2.Tags[0] = tag2;

    // 設置碎片在距最后修改時間30天后過期。
    lcr2.AbortMultipartUpload = new LifecycleRule.LifeCycleExpiration()
    {
        Days = 30
    };

    LifecycleRule lcr3 = new LifecycleRule();
    lcr3.ID = "only NoncurrentVersionTransition";
    lcr3.Prefix = "test1";
    lcr3.Status = RuleStatus.Enabled;
    lcr3.NoncurrentVersionTransitions = new LifecycleRule.LifeCycleNoncurrentVersionTransition[2]
    {
        // 設置非當前版本的Object距最后修改時間90天之后轉為低頻訪問類型。
        new LifecycleRule.LifeCycleNoncurrentVersionTransition(){
            StorageClass = StorageClass.IA,
            NoncurrentDays = 90
        },
        // 設置非當前版本的Object距最后修改時間180天之后轉為歸檔類型。
        new LifecycleRule.LifeCycleNoncurrentVersionTransition(){
            StorageClass = StorageClass.Archive,
            NoncurrentDays = 180
        }
    };
    setBucketLifecycleRequest.AddLifecycleRule(lcr1);
    setBucketLifecycleRequest.AddLifecycleRule(lcr2);
    setBucketLifecycleRequest.AddLifecycleRule(lcr3);

    // 設置生命周期規則。
    client.SetBucketLifecycle(setBucketLifecycleRequest);
    Console.WriteLine("Set bucket:{0} Lifecycle succeeded ", bucketName);
}
catch (OssException ex)
{
    Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
    Console.WriteLine("Failed with error info: {0}", ex.Message);
}

Android-Java

PutBucketLifecycleRequest request = new PutBucketLifecycleRequest();
request.setBucketName("examplebucket");

BucketLifecycleRule rule1 = new BucketLifecycleRule();
// 設置規則ID和文件前綴。
rule1.setIdentifier("1");
rule1.setPrefix("A");
// 設置是否執行生命周期規則。如果值為true,則OSS會定期執行該規則;如果值為false,則OSS會忽略該規則。
rule1.setStatus(true);
// 距最后修改時間200天后過期。
rule1.setDays("200");
// 30天后自動轉為歸檔存儲類型(Archive)
rule1.setArchiveDays("30");
// 未完成分片3天后過期。
rule1.setMultipartDays("3");
// 15天后自動轉為低頻存儲類型(IA)。
rule1.setIADays("15");

BucketLifecycleRule rule2 = new BucketLifecycleRule();
rule2.setIdentifier("2");
rule2.setPrefix("B");
rule2.setStatus(true);
rule2.setDays("300");
rule2.setArchiveDays("30");
rule2.setMultipartDays("3");
rule2.setIADays("15");

ArrayList<BucketLifecycleRule> lifecycleRules = new ArrayList<BucketLifecycleRule>();
lifecycleRules.add(rule1);
lifecycleRules.add(rule2);
request.setLifecycleRules(lifecycleRules);
OSSAsyncTask task = oss.asyncPutBucketLifecycle(request, new OSSCompletedCallback<PutBucketLifecycleRequest, PutBucketLifecycleResult>() {
    @Override
    public void onSuccess(PutBucketLifecycleRequest request, PutBucketLifecycleResult result) {
        OSSLog.logInfo("code::"+result.getStatusCode());

    }

    @Override
    public void onFailure(PutBucketLifecycleRequest request, ClientException clientException, ServiceException serviceException) {
        OSSLog.logError("error: "+serviceException.getRawMessage());

    }
});

task.waitUntilFinished();

Go

package main

import (
	"fmt"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
	"os"
)

func main() {
	// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// 創建OSSClient實例。
	// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
	client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// 填寫存儲空間名稱。
	bucketName := "examplebucket"
	// 指定生命周期規則1,并在規則中指定前綴為foo的文件在距離最后一次修改時間3天后過期。
	rule1 := oss.BuildLifecycleRuleByDays("rule1", "foo/", true, 3)

	// 在受版本控制狀態下的Object僅有刪除標記的情況下,自動刪除刪除標記。
	deleteMark := true
	expiration := oss.LifecycleExpiration{
		ExpiredObjectDeleteMarker: &deleteMark,
	}

	// 非當前版本Object超過30天后過期刪除。
	versionExpiration := oss.LifecycleVersionExpiration{
		NoncurrentDays: 30,
	}

	// 非當前版本Object超過10天后轉為IA存儲類型。
	versionTransition := oss.LifecycleVersionTransition{
		NoncurrentDays: 10,
		StorageClass:   "IA",
	}

	// 指定生命周期規則2。
	rule2 := oss.LifecycleRule{
		ID:                   "rule2",
		Prefix:               "yourObjectPrefix",
		Status:               "Enabled",
		Expiration:           &expiration,
		NonVersionExpiration: &versionExpiration,
		NonVersionTransitions: []oss.LifecycleVersionTransition{
			versionTransition,
		},
	}

	// 指定生命周期規則3,對標簽鍵為tag1、標簽值為value1的文件,距文件最后一次修改時間3天后過期。
	rule3 := oss.LifecycleRule{
		ID:     "rule3",
		Prefix: "",
		Status: "Enabled",
		Tags: []oss.Tag{
			oss.Tag{
				Key:   "tag1",
				Value: "value1",
			},
		},
		Expiration: &oss.LifecycleExpiration{Days: 3},
	}

	// 設置生命周期規則。
	rules := []oss.LifecycleRule{rule1, rule2, rule3}
	err = client.SetBucketLifecycle(bucketName, rules)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
}

C++

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /*初始化OSS賬號信息。*/
    
    /*yourEndpoint填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。*/
    std::string Endpoint = "yourEndpoint";
    /*填寫Bucket名稱,例如examplebucket。*/
    std::string BucketName = "examplebucket";

    /*初始化網絡等資源。*/
    InitializeSdk();

    ClientConfiguration conf;
    /* 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);

    SetBucketLifecycleRequest request(BucketName);
    std::string date("2022-10-12T00:00:00.000Z");

    /*設置標簽。*/
    Tagging tagging;
    tagging.addTag(Tag("key1", "value1"));
    tagging.addTag(Tag("key2", "value2"));

    /*指定生命周期規則。*/
    auto rule1 = LifecycleRule();
    rule1.setID("rule1");
    rule1.setPrefix("test1/");
    rule1.setStatus(RuleStatus::Enabled);
    rule1.setExpiration(3);
    rule1.setTags(tagging.Tags());

    /*指定過期時間。*/
    auto rule2 = LifecycleRule();
    rule2.setID("rule2");
    rule2.setPrefix("test2/");
    rule2.setStatus(RuleStatus::Disabled);
    rule2.setExpiration(date);

    /*rule3為針對版本控制狀態下的Bucket的生命周期規則。*/
    auto rule3 = LifecycleRule();
    rule3.setID("rule3");
    rule3.setPrefix("test3/");
    rule3.setStatus(RuleStatus::Disabled);

    /*設置Object距其最后修改時間365天之后自動轉為歸檔類型。*/  
    auto transition = LifeCycleTransition();  
    transition.Expiration().setDays(365);
    transition.setStorageClass(StorageClass::Archive);
    rule3.addTransition(transition);

    /*設置自動移除過期刪除標記。*/
    rule3.setExpiredObjectDeleteMarker(true);

    /*設置非當前版本的Object距最后修改時間10天之后轉為低頻訪問類型。*/
    auto transition1 = LifeCycleTransition();  
    transition1.Expiration().setDays(10);
    transition1.setStorageClass(StorageClass::IA);

    /*設置非當前版本的Object距最后修改時間20天之后轉為歸檔類型。*/
    auto transition2 = LifeCycleTransition();  
    transition2.Expiration().setDays(20);
    transition2.setStorageClass(StorageClass::Archive);

    /*設置Object在其成為非當前版本30天之后刪除。*/
    auto expiration  = LifeCycleExpiration(30);
    rule3.setNoncurrentVersionExpiration(expiration);

    LifeCycleTransitionList noncurrentVersionStorageTransitions{transition1, transition2};
    rule3.setNoncurrentVersionTransitionList(noncurrentVersionStorageTransitions);

    /*設置生命周期規則。*/
    LifecycleRuleList list{rule1, rule2, rule3};
    request.setLifecycleRules(list);
    auto outcome = client.SetBucketLifecycle(request);

    if (!outcome.isSuccess()) {
        /*異常處理 */
        std::cout << "SetBucketLifecycle fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /*釋放網絡等資源。*/
    ShutdownSdk();
    return 0;
}

C

#include "oss_api.h"
#include "aos_http_io.h"
/* yourEndpoint填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。*/
const char *endpoint = "yourEndpoint";
/* 填寫Bucket名稱,例如examplebucket。*/
const char *bucket_name = "examplebucket";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* 用char*類型的字符串初始化aos_string_t類型。*/
    aos_str_set(&options->config->endpoint, endpoint);
    /* 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    /* 是否使用cname域名訪問OSS服務。0表示不使用。*/
    options->config->is_cname = 0;
    /* 用于設置網絡相關參數,比如超時時間等。*/
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* 在程序入口調用aos_http_io_initialize方法來初始化網絡、內存等全局資源。*/
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* 用于內存管理的內存池(pool),等價于apr_pool_t。其實現代碼在apr庫中。*/
    aos_pool_t *pool;
    /* 重新創建一個內存池,第二個參數是NULL,表示沒有繼承其它內存池。*/
    aos_pool_create(&pool, NULL);
    /* 創建并初始化options,該參數包括endpoint、access_key_id、acces_key_secret、is_cname、curl等全局配置信息。*/
    oss_request_options_t *oss_client_options;
    /* 在內存池中分配內存給options。*/
    oss_client_options = oss_request_options_create(pool);
    /* 初始化Client的選項oss_client_options。*/
    init_options(oss_client_options);
    /* 初始化參數。*/
    aos_string_t bucket;
    aos_table_t *resp_headers = NULL; 
    aos_status_t *resp_status = NULL; 
    aos_str_set(&bucket, bucket_name);
    aos_list_t lifecycle_rule_list;   
    aos_str_set(&bucket, bucket_name);
    aos_list_init(&lifecycle_rule_list);
    /* 指定過期天數。*/
    oss_lifecycle_rule_content_t *rule_content_days = oss_create_lifecycle_rule_content(pool);
    aos_str_set(&rule_content_days->id, "rule-1");
    /* 設置文件前綴。*/
    aos_str_set(&rule_content_days->prefix, "dir1");
    aos_str_set(&rule_content_days->status, "Enabled");
    rule_content_days->days = 3;
    aos_list_add_tail(&rule_content_days->node, &lifecycle_rule_list);
    /* 指定過期時間。*/
    oss_lifecycle_rule_content_t *rule_content_date = oss_create_lifecycle_rule_content(pool);
    aos_str_set(&rule_content_date->id, "rule-2");
    aos_str_set(&rule_content_date->prefix, "dir2");
    aos_str_set(&rule_content_date->status, "Enabled");
    /* 過期時間格式為UTC。
    aos_str_set(&rule_content_date->date, "2023-10-11T00:00:00.000Z");
    aos_list_add_tail(&rule_content_date->node, &lifecycle_rule_list);
    /* 設置生命周期規則。*/
    resp_status = oss_put_bucket_lifecycle(oss_client_options, &bucket, &lifecycle_rule_list, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        printf("put bucket lifecycle succeeded\n");
    } else {
        printf("put bucket lifecycle failed, code:%d, error_code:%s, error_msg:%s, request_id:%s\n",
            resp_status->code, resp_status->error_code, resp_status->error_msg, resp_status->req_id);
    }
    /* 釋放內存池,相當于釋放了請求過程中各資源分配的內存。*/
    aos_pool_destroy(pool);
    /* 釋放之前分配的全局資源。*/
    aos_http_io_deinitialize();
    return 0;
}

Ruby

require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # Endpoint以華東1(杭州)為例,其它Region請按實際情況填寫。
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# 填寫Bucket名稱。
bucket = client.get_bucket('examplebucket')
# 設置生命周期規則。
bucket.lifecycle = [
  Aliyun::OSS::LifeCycleRule.new(
    :id => 'rule1', :enable => true, :prefix => 'foo/', :expiry => 3),
  Aliyun::OSS::LifeCycleRule.new(
    :id => 'rule2', :enable => false, :prefix => 'bar/', :expiry => Date.new(2016, 1, 1))
]

使用命令行工具ossutil

關于使用ossutil設置生命周期規則的具體操作, 請參見添加或修改生命周期規則

使用REST API

如果您的程序自定義要求較高,您可以直接發起REST API請求。直接發起REST API請求需要手動編寫代碼計算簽名。更多信息,請參見PutBucketLifecycle

通過CopyObject接口手動轉換Object的存儲類型

您可以通過CopyObject接口,將Object覆寫為指定的存儲類型。

  • 如果將Object修改為低頻訪問、歸檔存儲、冷歸檔存儲、深度冷歸檔存儲類型,Object會涉及最小計量空間64 KB、最短存儲周期、數據取回費用等。更多信息,請參見注意事項

  • 歸檔存儲、冷歸檔存儲、深度冷歸檔存儲類型的Object需要解凍后才可以修改存儲類型。關于解凍Object的具體操作,請參見解凍Object。如果您已開啟歸檔直讀,則歸檔存儲數據無需解凍就可以修改存儲類型。直接讀取會產生歸檔直讀數據取回容量費用,請參見歸檔直讀

說明
  • 在已開啟版本控制的Bucket中,通過CopyObject轉換Object的存儲類型時,OSS將會為新拷貝的Object自動生成唯一的版本ID,此版本ID將會在響應Header中的x-oss-version-id返回。

  • 在未開啟或者暫停版本控制的Bucket中,通過CopyObject轉換Object的存儲類型時,OSS將會為新拷貝的Object自動生成version ID為null的版本,且會覆蓋原有versionId為null的版本。如果被覆蓋的文件類型為低頻、歸檔、冷歸檔或者深度冷歸檔,可能會涉及存儲不足規定時長容量費用。更多信息,請參見Object在存儲不足規定時長時如何計費?

基于CopyObject轉換存儲類型規則

  • 本地冗余(LRS)

    標準存儲(LRS)、低頻訪問(LRS)、歸檔存儲(LRS)、冷歸檔存儲(LRS)和深度冷歸檔存儲(LRS)各存儲類型之間可任意轉換。

  • 同城冗余(ZRS)

    僅支持標準存儲(ZRS)和低頻訪問(ZRS)之間互相轉換。

通過CopyObject轉換存儲類型操作方式

使用OSS管理控制臺

通過控制臺修改Object存儲類型時,Object大小不能超過1 GB。超過1 GB的Object,建議通過SDK或者命令行工具ossutil。

  1. 登錄OSS管理控制臺

  2. 單擊Bucket 列表,然后單擊目標Bucket名稱。

  3. 在左側導航欄,選擇文件管理 > 文件列表

  4. 文件列表頁面,選擇目標Object右側的more > 修改存儲類型

  5. 建議您打開保留用戶自定義元數據開關,修改存儲類型后,Object的自定義元數據信息會被保留。

  6. 選擇您希望修改的存儲類型后,單擊確定

使用阿里云SDK

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.CopyObjectRequest;
import com.aliyun.oss.model.CopyObjectResult;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.StorageClass;

public class Demo {
    public static void main(String[] args) throws Exception {
        // Endpoint以華東1(杭州)為例,其它Region請按實際情況填寫。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 本示例中的Bucket與Object需提前創建好, 且Object類型為標準或低頻訪問存儲類型。
        // 填寫Bucket名稱,例如examplebucket。
        String bucketName = "examplebucket";
        // 填寫不包含Bucket名稱在內的Object完整路徑,例如exampleobject.txt。
        String objectName = "exampleobject.txt";

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

        try {
            // 創建CopyObjectRequest對象。
            CopyObjectRequest request = new CopyObjectRequest(bucketName, objectName, bucketName, objectName) ;

            // 創建ObjectMetadata對象。
            ObjectMetadata objectMetadata = new ObjectMetadata();

            // 將Object存儲類型轉換為歸檔類型。
            objectMetadata.setHeader("x-oss-storage-class", StorageClass.Archive);
            // 將Object存儲類型轉換為冷歸檔類型。
            // objectMetadata.setHeader("x-oss-storage-class", StorageClass.ColdArchive);
            // 將Object存儲類型轉換為深度冷歸檔類型。
            // objectMetadata.setHeader("x-oss-storage-class", StorageClass.DeepColdArchive);
            request.setNewObjectMetadata(objectMetadata);

            // 更改文件存儲類型。
            CopyObjectResult result = ossClient.copyObject(request);
        } 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();
            }
        }
    }
}
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;

// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
$provider = new EnvironmentVariableCredentialsProvider();
// Endpoint以杭州為例,其它Region請按實際情況填寫。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 填寫Bucket名稱。
$bucket= "<yourBucketName>";
// 填寫不包含Bucket名稱在內的Object的完整路徑,例如destfolder/exampleobject.txt。
$object = "<yourObjectName>";

$config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
    );
    $ossClient = new OssClient($config);

try {

    // 指定轉換后的文件存儲類型,例如指定為歸檔存儲類型(Archive)。
    $copyOptions = array(
        OssClient::OSS_HEADERS => array(            
            'x-oss-storage-class' => 'Archive',
            'x-oss-metadata-directive' => 'REPLACE',
        ),
    );
    
    $ossClient->copyObject($bucket, $object, $bucket, $object, $copyOptions);

} catch (OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}

print(__FUNCTION__ . ": OK" . "\n");
const OSS = require('ali-oss');

const client = new OSS({
  // yourregion填寫Bucket所在地域。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
  region: 'yourregion',
  // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // yourbucketname填寫存儲空間名稱。
  bucket: 'yourbucketname'
})
const options = {
    headers:{'x-oss-storage-class':'Archive'}
}
client.copy('Objectname','Objectname',options).then((res) => {
    console.log(res);
}).catch(err => {
    console.log(err)
})
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import os
# 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())

# Endpoint以杭州為例,其它Region請按實際情況填寫。
# 填寫Bucket名稱,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
# 填寫Object的完整路徑,完整路徑中不能包含Bucket名稱,例如exampledir/exampleobject.txt。
# 需確保該Object的存儲類型為標準存儲或低頻訪問類型。
object_name = 'exampledir/exampleobject.txt'

# 通過添加存儲類型Header,將Object存儲類型轉換為歸檔類型。
headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_ARCHIVE}
# 通過添加存儲類型Header,將Object存儲類型轉換為冷歸檔類型。
# headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_COLD_ARCHIVE}
# 通過添加存儲類型Header,將Object存儲類型轉換為深度冷歸檔類型。
# headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_DEEP_COLD_ARCHIVE}
# 更改文件存儲類型。
bucket.copy_object(bucket.bucket_name, object_name, object_name, headers)                    
package main

import (
    "fmt"
    "os"

    "github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
    /// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 創建OSSClient實例。
    // yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    // yourBucketName填寫存儲空間名稱。
    bucketName := "yourBucketName"
    // yourObjectName填寫不包含Bucket名稱在內的Object的完整路徑。
    objectName := "yourObjectName"
    bucket, err := client.Bucket(bucketName)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 更改文件存儲類型,例如修改為歸檔存儲類型。
    _, err = bucket.CopyObject(objectName, objectName, oss.ObjectStorageClass(oss.StorageArchive))
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
}
OSSCopyObjectRequest * copy = [OSSCopyObjectRequest new];
copy.sourceBucketName = @"examplebucket";
copy.sourceobjectKey = @"exampleobject.txt";
copy.bucketName = @"examplebucket";
copy.objectKey = @"exampleobject.txt";
// 將exampleobject.txt的存儲類型指定為歸檔類型Archive。
copy.objectMeta = @{@"x-oss-storage-class" : @"Archive"};

OSSTask * task = [client copyObject:copy];
[task continueWithBlock:^id(OSSTask *task) {
    if (!task.error) {
        NSLog(@"copy object success!");
    } else {
        NSLog(@"copy object failed, error: %@" , task.error);
    }
    return nil;
}];
#include <iostream>
#include <alibabacloud/oss/OssClient.h>

using namespace AlibabaCloud::OSS;

int main(void)
{  
            
    /* 填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。*/
    std::string Endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    /* 填寫Bucket名稱,例如examplebucket。*/
    std::string BucketName = "examplebucket";
    /* 填寫Object完整路徑,完整路徑中不能包含Bucket名稱,例如exampledir/exampleobject.txt。*/
    std::string ObjectName = "exampledir/exampleobject.txt";
  
    /* 初始化網絡等資源。*/
    InitializeSdk();
    ClientConfiguration conf;
    /* 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    
    /* 設置修改后的文件存儲類型,例如將修改后的文件存儲類型設置為歸檔類型。*/
    ObjectMetaData objectMeta;
    objectMeta.addHeader("x-oss-storage-class", "Archive");
    
    std::string SourceBucketName = BucketName;
    std::string SourceObjectName = ObjectName;
    
    CopyObjectRequest request(SourceBucketName, ObjectName, objectMeta);
    request.setCopySource(SourceBucketName, SourceObjectName);
    
    /* 修改為上述指定的文件存儲類型。*/
    auto outcome = client.CopyObject(request);
    if (!outcome.isSuccess()) {
        /* 異常處理。*/
        std::cout << "CopyObject fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }
    
    /* 釋放網絡等資源。*/
    ShutdownSdk();
    return 0;
}

使用命令行工具ossutil

關于使用ossutil轉換Object存儲類型的具體步驟, 請參見修改文件存儲類型

使用REST API

如果您的程序自定義要求較高,您可以直接發起REST API請求。直接發起REST API請求需要手動編寫代碼計算簽名。更多信息,請參見CopyObject

注意事項

當Object被轉換為低頻訪問、歸檔存儲、冷歸檔存儲或者深度冷歸檔存儲類型后,需注意以下事項:

最小計量空間

對于小于64 KB的Object,會按照64 KB計算空間大小。

最低存儲時長

低頻訪問類型的Object需至少存儲30天,歸檔存儲類型的Object需至少存儲60天,冷歸檔存儲類型的Object需至少存儲180天,深度冷歸檔存儲類型的Object需至少存儲180天。如果存儲未滿指定周期,會對應收取存儲不足規定時長容量費用。更多信息,請參見存儲費用

  • 通過生命周期自動轉換Object存儲類型

    • 將Object存儲類型轉換為低頻、歸檔類型時,不會重新計算Object的存儲時間。

      例如,a.txt作為標準存儲類型已在OSS中存儲了10天,通過生命周期轉換為低頻訪問類型,則繼續存儲20天即可滿足最低存儲時長30天的要求。

    • 將Object存儲類型轉換為冷歸檔或者深度冷歸檔類型時,會重新計算Object的存儲時間。

      • 示例1:a.txt作為標準存儲類型或者低頻訪問類型已在OSS中存儲了10天,通過生命周期規則轉換為冷歸檔或者深度冷歸檔類型,需繼續存儲180天才滿足最低存儲時長180天的要求。

      • 示例2:a.txt作為冷歸檔類型已在OSS中存儲了30天,通過生命周期規則轉換為深度冷歸檔,將收取冷歸檔存儲不足規定時長180天的費用。此外,轉為深度冷歸檔后,需繼續存儲180天后才滿足最低存儲時長180天的要求。

  • 通過CopyObject手動轉換Object存儲類型

    通過CopyObject手動轉換Object為任意存儲類型時,會重新計算Object的存儲時間。

    例如,a.txt作為標準存儲類型已在OSS中存儲了10天,通過CopyObject手動將Object轉換為低頻訪問類型,需繼續存儲30天才滿足最低存儲時長30天的要求。

說明

如果您在低頻訪問、歸檔、冷歸檔或者深度冷歸檔類型的Object存儲未滿規定時長前,進行重命名或者通過上傳同名文件進行覆寫等操作,會產生存儲不足規定時長容量費用。例如,您在低頻訪問類型Object存儲29天后執行了重命名操作,OSS將重新計算Object的最后修改時間,即您需要繼續存儲30天才能滿足低頻訪問最低存儲時長的要求。

解凍時間

歸檔存儲、冷歸檔存儲和深度冷歸檔存儲類型Object恢復為可讀取狀態需要一定的解凍時間,如果業務場景需要實時讀取Object時,不建議將Object轉換成歸檔存儲、冷歸檔存儲或深度冷歸檔存儲類型。

請求費用

轉換存儲類型的方式

Object源存儲類型

請求費用

通過生命周期規則

標準、低頻訪問、歸檔、冷歸檔

按照Object的源存儲類型收取Put類請求費用,計量到當前Bucket。

通過CopyObject

歸檔存儲

  • 已開啟歸檔直讀

    • 按Object源存儲類型收取Get類請求費用,計量到源Bucket。

    • 按Object的目標存儲類型收取Put類請求費用,計量到目標Bucket。

  • 未開啟歸檔直讀

    按Object源存儲類型收取Put類請求費用,計量到目標Bucket。

標準、低頻訪問、冷歸檔、深度冷歸檔

按Object源存儲類型收取Put類請求費用,計量到目標Bucket。

在已開啟歸檔直讀的情況下,通過CopyObject將歸檔存儲類型的源Object轉換為其他存儲類型時,無需提前解凍,不會產生歸檔存儲數據取回容量費用,但會產生歸檔直讀數據取回容量費用。

在未開啟歸檔直讀的情況下,通過CopyObject將歸檔存儲類型的源Object轉換為其他存儲類型時,需提前解凍,會產生歸檔存儲數據取回容量費用,不會產生歸檔直讀數據取回容量費用。

更多信息,請參見數據處理費用

數據取回費用

訪問低頻訪問類型的Object時,會根據實際訪問量額外收取數據取回費用。解凍歸檔存儲、冷歸檔存儲和深度冷歸檔存儲類型的Object會額外收取數據解凍費用。開啟歸檔直讀后,直接訪問歸檔存儲數據的Object會額外收取歸檔直讀費用。這些費用與流出流量費用是兩個獨立計費項。如果Object每月平均訪問頻率高于1次,Object轉換成低頻訪問、歸檔存儲、冷歸檔存儲或深度冷歸檔存儲類型后的使用成本可能高于標準存儲類型。

臨時存儲費用

冷歸檔存儲和深度冷歸檔存儲類型Object在數據解凍時會生成一份標準存儲類型的Object副本用于訪問。該Object在解凍時間結束前會以標準存儲的存儲費率計算臨時存儲費用。

常見問題

基于最后一次修改時間的生命周期規則是否支持將Object從低頻訪問類型轉換為標準類型?

不支持。您可以通過以下方式將Object從低頻訪問類型轉為標準類型:

  • 通過CopyObject的方式

    CopyObject接口支持將單個Object從低頻訪問類型轉為標準類型。具體操作,請參見通過CopyObject接口手動轉換Object的存儲類型

  • 通過ossutil工具

    ossutil支持通過set-meta命令添加X-Oss-Storage-Class選項的方式將單個或多個Object從低頻訪問類型轉換為標準類型。具體操作,請參見設置或更新元數據