すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:OSSディレクトリの管理

最終更新日:Apr 08, 2024

Object Storage Service (OSS) は、従来のファイルシステムでオブジェクトを格納するために使用されていた階層構造ではなく、フラット構造を使用します。 OSS内のすべてのデータはオブジェクトとしてバケットに保存されます。 オブジェクト管理を容易にするために、OSSコンソールは、名前がスラッシュ (/) で終わるオブジェクトをディレクトリとして表示します。 ディレクトリは、ファイルシステムのフォルダに似ています。 ディレクトリを使用して、オブジェクトを階層的に整理およびグループ化し、アクセス制御を容易にします。

働き主義

OSSは0バイトのオブジェクトを使用してディレクトリをシミュレートし、フォルダのような構造をサポートします。 OSSでディレクトリを作成するときは、ディレクトリの名前を指定します。 たとえば、バケットにlogという名前のディレクトリを作成すると、OSSはlog/ という名前の0バイトのオブジェクトを作成します。

サンプルディレクトリ

OSSは、名前がスラッシュ (/) で終わるオブジェクトをディレクトリとして扱います。 次の例は、examplebucketという名前のバケットの構造を示しています。

examplebucket
    └ ─ ─ ログ /
       â ─ ─ date1.txt
       â ─ ─ date2.txt
       â ─ ─ date3.txt
    └ ─ ─ destfolder /
       └ ─ ─ 2021 /
          â ─ ─ photo.jpg 

上記の構造では、

  • 次の3つのオブジェクトには、log/date1.txtlog/date2.txtlog/date3.txtというプレフィックスがあります。 OSSコンソールにlogという名前のディレクトリが表示されます。 date1.txtdate2.txtdate3.txtという3つのオブジェクトがディレクトリに格納されます。

  • 次のオブジェクトの名前に "destfolder" プレフィックスが含まれています: destfolder/2021/photo.jpg。 destfolderという名前のディレクトリがOSSコンソールに表示されます。 ディレクトリには、2021という名前のサブディレクトリが含まれます。 photo.jpgという名前のオブジェクトがサブディレクトリに格納されます。

ディレクトリへのアクセスを許可する

次の例では、前のセクションで説明したexamplebucketバケット内の指定されたディレクトリとオブジェクトにアクセスするために、サードパーティのユーザーに異なる権限を付与する方法を示します。

  • ログディレクトリ内の次のオブジェクトは、過去3日間のユーザーのOSSアクセスログを格納します: log/date1.txtlog/date2.txt、およびlog/date3.txt。 テクニカルサポートチームは、3つのオブジェクトに保存されているログを表示して、低速アクセスやオブジェクトのアップロードの失敗など、報告された問題をトラブルシューティングする必要があります。 この場合、バケットポリシーを設定して、他のユーザーにログディレクトリ内のオブジェクトにアクセスする権限を付与できます。 詳細については、「他のユーザーにOSSリソースへのアクセスを許可するバケットポリシーの設定」をご参照ください。

  • examplebucketのdestfolder/2021/photo.jpgオブジェクトは、2021の春の外出で撮影された従業員グループ写真です。 すべての従業員がオブジェクトにアクセスできるようにする必要があります。 この場合、オブジェクトのアクセス制御リスト (ACL) をpublic-readに設定できます。 詳細については、「オブジェクトACL」をご参照ください。

ディレクトリの作成

次の方法でディレクトリを作成できます。

説明

ディレクトリを個別に作成するだけでなく、オブジェクトのアップロード時にオブジェクト名のプレフィックスを指定することでディレクトリを自動的に作成できます。 たとえば、データをアップロードするパスとしてexampledir/demo.txtを指定し、exampledirディレクトリがバケットに存在しない場合、OSSは自動的にexampledirディレクトリを作成します。

OSS コンソールの使用

  1. OSS コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

  3. 左側のナビゲーションツリーで、ファイル を選択します。

  4. オブジェクト ページで、ディレクトリの作成 をクリックします。

  5. ディレクトリの作成 パネルで、ディレクトリ名 パラメーターを設定します。

    ディレクトリ名は次の要件を満たす必要があります。

    • ディレクトリ名はUTF-8文字で、絵文字を含めることはできません。
    • スラッシュ (/) は、サブディレクトリを示すためにディレクトリ名で使用されます。 複数のスラッシュ (/) を含むディレクトリ名を指定して、ディレクトリ内にサブディレクトリを作成できます。 ディレクトリ名の先頭をスラッシュ (/) またはバックスラッシュ (\) にすることはできません。 ディレクトリ名に連続したスラッシュ (/) を含めることはできません。
    • サブディレクトリの名前を2つの連続したピリオド (..) にすることはできません。
    • ディレクトリ名は1 ~ 254文字である必要があります。
  6. OK をクリックします。

ossbrowser の使用

ossbrowserを使用して、OSSコンソールで実行できるのと同じオブジェクトレベルの操作を実行できます。 ossbrowserの画面上の指示に従って、ディレクトリを作成できます。 詳細については、「ossbrowserの使用」をご参照ください。

OSS SDKの使用

次のサンプルコードは、一般的なプログラミング言語でOSS SDKを使用してディレクトリを作成する方法の例を示しています。 他のプログラミング言語のOSS SDKを使用してディレクトリを作成する方法の詳細については、「概要」をご参照ください。

System.Textを使用した
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。java.io.ByteArrayInputStreamをインポートします。public classデモ {

    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // セキュリティ上の理由から、プロジェクトコードにアクセス資格情報を保存しないことをお勧めします。 この例では、アクセス資格情報は環境変数から取得されます。 サンプルコードを実行する前に、環境変数が設定されていることを確認してください。 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。 例: examplebucket. 
        String bucketName = "examplebucket";
        // 方法1を使用して作成するディレクトリの名前を指定します。 
        文字列dirName = "exampledir/";
        // 方法2を使用して作成するディレクトリの名前を指定します。 
        文字列dirName2 = "exampledir1/";

        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // 方法1: createDirectory操作を呼び出してディレクトリを作成します。 このメソッドを使用してディレクトリを作成する前に、階層的な名前空間機能を有効にする必要があります。 
            ossClient.createDirectory(bucketName、dirName);

            // 方法2: 空の文字列をアップロードしてディレクトリを作成します。 
            ossClient.putObject(bucketName, dirName2, new ByteArrayInputStream("".getBytes()));
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            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';
}

OSS\Credentials\EnvironmentVariableCredentialsProviderを使用します。OSS\OssClientを使用します。OSS\CoreOssExceptionを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
$provider = new EnvironmentVariableCredentialsProvider();
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
$end point = "yourEndpoint";
// バケットの名前を指定します。 例: examplebucket. 
$bucket= "examplebucket";
// ディレクトリの名前を指定します。 ディレクトリ名はスラッシュ (/) で終わる必要があります。 
$object = "exampledir/";
$content = "";
try {
    $config=配列 (
        "provider" => $provider、
        "endpoint" => $end ポイント、
    );
    $ossClient = new OssClient($config);

    $ossClient->putObject($bucket、$object、$content);
} catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage()) 。 "\n");
    戻ります。}
print(__FUNCTION__) 。 「OK」。 "\n");

// アップロードリクエストのヘッダーを設定して、アップロードされた文字列に関する情報を指定できます。 たとえば、オブジェクトACLをprivateに設定し、オブジェクトのユーザーメタデータを設定できます。 
$options = array(
    OssClient::OSS_HEADERS => array(
        'x-oss-object-acl' => 'private' 、
        'x-oss-meta-info' => 'your info'
    ),
);
try {
    $config=配列 (
        "provider" => $provider、
        "endpoint" => $end ポイント、
    );
    $ossClient = new OssClient($config);

    $ossClient->putObject($bucket、$object、$content、$options);
} catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage()) 。 "\n");
    戻ります。}
print(__FUNCTION__) 。 「OK」。 "\n"); 
const OSS = require('ali-OSS ');

const client = new OSS({
  // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを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: 'examplebucket' 、});

async関数putBuffer () {
  try {
    // ディレクトリの名前を指定します。 ディレクトリ名はスラッシュ (/) で終わる必要があります。 
    const result = await client.put('exampledir/', new Buffer(''));
    console.log (結果);
  } catch (e) {
    console.log(e);
  }
}

putBuffer();
# -*- coding: utf-8 -*-

oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート

# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
# バケットの名前を指定します。 
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'examplebucket')

# ディレクトリの名前を指定します。 ディレクトリ名はスラッシュ (/) で終わる必要があります。 


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

    // Create an OSSClient instance. 
    // バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。 
    client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // バケットの名前を指定します。 例: examplebucket. 
    bucket, err := client.Bucket("examplebucket")
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // ディレクトリの名前を指定します。 ディレクトリ名はスラッシュ (/) で終わる必要があります。 
    err = bucket.PutObject("exampledir/", bytes.NewReader([]byte(""))))
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
} 
パッケージメインbucket.put_object('exampledir/', '') 
;
Aliyun.OSSを使用します。// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
var endpoint = "yourEndpoint";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。 例: examplebucket. 
var bucketName = "examplebucket";
// ディレクトリの名前を指定します。 ディレクトリ名はスラッシュ (/) で終わる必要があります。 
var objectName = "exampledir/";
var objectContent = "";

// OSSClientインスタンスを作成します。 
var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret);
トライ
{
    byte[] binaryData = Encoding.ASCII.GetBytes(objectContent);
    MemoryStream requestContent = new MemoryStream(binaryData);
    // ディレクトリを作成します。 
    client.PutObject(bucketName, objectName, requestContent);
    Console.WriteLine("Put object successed");
}
キャッチ (例外ex)
{
    Console.WriteLine("Put object failed, {0}", ex.Message);
} 
#include "oss_api.h"
# 「aos_http_io.h」を含める
/* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 * /
const char * endpoint = "yourEndpoint";

/* バケットの名前を指定します。 例: examplebucket. * /
const char * bucket_name = "examplebucket";
/* ディレクトリの名前を指定します。 ディレクトリ名はスラッシュ (/) で終わる必要があります。 * /
const char * object_name = "exampledir/";
const char * object_content = "";
void init_options(oss_request_options_t * オプション)
{
    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を使用するかどうかを指定します。 値0は、CNAMEが使用されないことを示す。 */
    options->config->is_cname = 0;
    /* タイムアウト期間などのネットワークパラメーターを設定します。 */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char * argv[])
{
    /* main() でaos_http_io_initializeメソッドを呼び出して、ネットワークリソースやメモリリソースなどのグローバルリソースを初期化します。 */
    if (aos_http_io_initialize(NULL, 0))! =AOSE_OK) {
        exit(1);
    }
    /* メモリを管理するためのメモリプールを作成します。 aos_pool_tはapr_pool_tと同じです。 メモリプールの作成に使用されるコードは、APRライブラリに含まれています。 */
    aos_pool_t *pool;
    /* メモリプールを作成します。 2番目のパラメーターの値はNULLです。 この値は、プールが他のメモリプールを継承しないことを指定します。 */
    aos_pool_create(&pool, NULL);
    /* Create and initialize options. このパラメーターには、エンドポイント、access_key_id、access_key_secret、is_cname、curlなどのグローバル構成情報が含まれます。 */
    oss_request_options_t *oss_client_options;
    /* メモリプール内のメモリリソースをオプションに割り当てます。 */
    oss_client_options = oss_request_options_create(pool);
    /* oss_client_optionsを初期化します。 */
    init_options(oss_client_options);
    /* パラメーターを初期化します。 */
    aos_string_t bucket;
    aos_string_t object;
    aos_list_t buffer;
    aos_buf_t *content = NULL;
    aos_table_t *headers = NULL;
    aos_table_t *resp_headers = NULL; 
    aos_status_t *resp_status = NULL; 
    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);
    aos_list_init(&buffer);
    content = aos_buf_pack(oss_client_options->pool, object_content, strlen(object_content));
    aos_list_add_tail(&content->node, &buffer);
    /* オブジェクトをアップロードします。 */
    resp_status = oss_put_object_from_buffer(oss_client_options, &bucket, &object, &buffer, headers, &resp_headers);
    /* オブジェクトがアップロードされているかどうかを確認します。 */
    if (aos_status_is_ok(resp_status)) {
        printf("put object from buffer succeeded\n");
    } else {
        printf("put object from buffer failed\n");      
    }
    /* メモリプールを解放します。 この操作により、リクエストに割り当てられたメモリリソースが解放されます。 */
    aos_pool_destroy(pool);
    /* 割り当てられたグローバルリソースを解放します。 */
    aos_http_io_deinitialize();
    0を返します。} 

ossutil の使用

ossutilを使用してディレクトリを作成できます。 詳細は、「mkdir」をご参照ください。

OSS APIの使用

ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「PutObjectおよびCreateDirectory」をご参照ください。

ディレクトリの名前変更

バケットの階層名前空間機能が有効になっている場合は、バケット内のディレクトリの名前を直接変更できます。

OSS コンソールの使用

  1. OSS コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

  3. 左側のナビゲーションツリーで、ファイル > オブジェクト を選択します。

  4. ディレクトリの名前を変更または移動します。

    API 操作

    手順

    ディレクトリの名前変更

    名前を変更するディレクトリの名前の上にポインタを移動し、アイコンをクリックしeditます。 ディレクトリ名はスラッシュ (/) で始めることはできません。

    ディレクトリの移動

    ディレクトリを移動する手順は、ディレクトリの名前を変更する手順と似ています。 違いは、ディレクトリを移動するときに、ディレクトリの新しい名前にスラッシュ (/) を追加する必要があることです。 次の例は、ディレクトリの移動方法を示しています。

    • subdirサブディレクトリをdestdirディレクトリからdestfolderディレクトリに移動するには、新しいディレクトリ名を /destfolder/subdirに設定します。

    • subdirサブディレクトリをdestdirディレクトリから現在のバケットのルートディレクトリに移動するには、新しいディレクトリ名を /subdirに設定します。

OSS SDKの使用

異なるプログラミング言語のOSS SDKのうち、Java 3.12.0以降のOSS SDKのみがディレクトリの名前変更をサポートしています。 次のサンプルコードは、OSS SDK for Javaを使用してディレクトリの名前を変更する方法の例を示しています。

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;

public classデモ {

    public static void main(String[] args) throws Exception {
        // バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
        String endPoint = "yourEndpoint";
        // セキュリティ上の理由から、プロジェクトコードにアクセス資格情報を保存しないことをお勧めします。 この例では、アクセス資格情報は環境変数から取得されます。 サンプルコードを実行する前に、環境変数が設定されていることを確認してください。 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。 例: examplebucket. 
        String bucketName = "examplebucket";
        // ソースディレクトリの絶対パスを指定します。 絶対パスにバケット名を含めないでください。 
        文字列sourceDir = "exampledir";
        // ソースディレクトリと同じバケットにある宛先ディレクトリの絶対パスを指定します。 絶対パスにバケット名を含めないでください。 
        文字列destinationDir = "newexampledir";

        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endPoint, credentialsProvider);

        try {
            // ソースディレクトリの絶対パスを宛先ディレクトリのパスに変更します。 
            RenameObjectRequest renameObjectRequest = new RenameObjectRequest(bucketName, sourceDir, destinationDir);
            ossClient.renameObject(renameObjectRequest);
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

OSS APIの使用

ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「名前の変更」をご参照ください。

バケットの階層名前空間機能が有効になっていない場合、バケット内のディレクトリの名前を変更する場合は、バケット内のすべてのオブジェクトを一覧表示し、オブジェクトを新しいディレクトリにコピーして、古いディレクトリ内のオブジェクトを削除する必要があります。

説明

多数のオブジェクトをコピーする必要がある場合は、Data Online Migrationを使用してオブジェクトを移行できます。 詳細については、「Alibaba Cloud OSSバケット間のデータ移行」をご参照ください。

ossbrowser の使用

  1. ossbrowserにインストールしてログインします

  2. ディレクトリを選択します。 上部のナビゲーションバーで、[詳細] > [名前の変更] を選択します。

    ossbrowser重命名目录.png

  3. [名前の変更] ダイアログボックスで、新しいディレクトリ名を入力し、[OK] をクリックします。

OSS SDKの使用

OSS SDKを使用してディレクトリの名前を変更する場合、いくつかの操作が必要です。 OSS SDKを使用してディレクトリの名前を変更するコード例については、「オブジェクトのリスト」、「オブジェクトのコピー」、「オブジェクトの削除」をご参照ください。

ossutil の使用

ossutilを使用してディレクトリの名前を変更できます。 ディレクトリ名の変更に関連するossutilコマンドの詳細については、「Is」、「オブジェクトのコピー」、および「rm」をご参照ください。

OSS APIの使用

ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「ListObjectsV2 (GetBucketV2) 」または「GetBucket (ListObjects) 」、「CopyObject」および「DeleteObject」をご参照ください。

ディレクトリの削除

不要になったディレクトリを削除できます。

警告

ディレクトリを削除すると、ディレクトリ内のサブディレクトリとすべてのオブジェクトが同期的に削除されます。 ディレクトリを削除するときは注意が必要です。

OSS コンソールの使用

  1. OSS コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

  3. 左側のナビゲーションツリーで、ファイル > オブジェクト を選択します。

  4. オブジェクト ページで、目的のディレクトリを削除します。

    重要

    ディレクトリを削除するときに、タスクリストパネルを更新または閉じないでください。 そうでなければ、削除は中断される。

    • バケットの階層名前空間機能が有効になっている場合

      削除するディレクトリを見つけて、[操作] 列の [削除] をクリックします。 表示されるメッセージで、[OK] をクリックします。

      ディレクトリとディレクトリ内のオブジェクトは完全に削除されます。

    • バケットの階層名前空間機能が無効になっている場合

      • バケットの階層名前空間とバージョン管理機能が無効になっている場合、階層名前空間機能が有効になっているバケットからディレクトリを削除するのと同じ方法で、バケットからディレクトリを削除します。

      • 階層名前空間機能が無効になっていて、バケットのバージョン管理機能が有効になっている場合、次のいずれかの方法を使用してディレクトリを削除できます。

        • 削除したディレクトリを旧バージョンとして保存する

          1. オブジェクトリストの右上隅で、前のバージョンの表示非表示 に設定します。

          2. 削除するディレクトリを見つけて、[操作] 列の 削除 をクリックします。 表示されるメッセージで、OK をクリックします。

            削除されたディレクトリとディレクトリ内のオブジェクトは、復元可能な以前のバージョンとして保存されます。 以前のバージョンのオブジェクトを復元する方法の詳細については、「以前のバージョンの復元」をご参照ください。

        • ディレクトリを完全に削除する

          1. オブジェクトリストの右上隅で、前のバージョンの表示表示 に設定します。

          2. 削除するディレクトリを見つけて、[操作] 列の 完全に削除 をクリックします。 表示されるメッセージで、OK をクリックします。

            ディレクトリとディレクトリ内のオブジェクトは完全に削除されます。

    • バケットのバージョン管理が無効になっている場合

      削除するディレクトリを見つけて、[操作] 列の 完全に削除 をクリックします。 表示されるメッセージで、OK をクリックします。

      ディレクトリとディレクトリ内のオブジェクトは完全に削除されます。

    • バケットのバージョン管理が有効または一時停止されている場合

      • 削除したディレクトリを旧バージョンとして保存する

        1. オブジェクトリストの右上隅で、前のバージョンの表示非表示 に設定します。

        2. 削除するディレクトリを見つけて、[操作] 列の 削除 をクリックします。 表示されるメッセージで、OK をクリックします。

          削除されたディレクトリとディレクトリ内のオブジェクトは、復元可能な以前のバージョンとして保存されます。 以前のバージョンのオブジェクトを復元する方法の詳細については、「以前のバージョンの復元」をご参照ください。

      • ディレクトリを完全に削除する

        1. オブジェクトリストの右上隅で、前のバージョンの表示表示 に設定します。

        2. 削除するディレクトリを見つけて、[操作] 列の 完全に削除 をクリックします。 表示されるメッセージで、OK をクリックします。

          ディレクトリとディレクトリ内のオブジェクトは完全に削除されます。

  5. タスクリスト パネルで、削除の進行状況を確認します。

    OSSが削除タスクを実行すると、次の操作を実行できます。

    • 削除完了 をクリックして、完了したタスクをタスクリストから削除します。

    • すべて一時停止 をクリックして、実行中のすべての削除タスクを中断します。 タスクが中断されると、次の操作を実行できます。

      • [操作] 列で、開始 をクリックしてタスクを再開します。

      • [操作] 列で、削除 をクリックしてタスクを削除します。 タスクを削除すると、タスクによって削除されなかったオブジェクトが保持されます。

    • すべて開始 をクリックして、中断されたすべてのタスクを再開します。

ossbrowser の使用

ossbrowserを使用して、OSSコンソールで実行できるのと同じオブジェクトレベルの操作を実行できます。 ossbrowserの画面上の指示に従って、ディレクトリを削除できます。 詳細については、「ossbrowserの使用」をご参照ください。

OSS SDKの使用

次のサンプルコードは、一般的なプログラミング言語のOSS SDKを使用してディレクトリを削除する方法の例を示しています。 他のプログラミング言語のOSS SDKを使用してディレクトリを削除する方法の詳細については、「概要」をご参照ください。

オブジェクトを削除するときは、削除するすべてのオブジェクトの名前に含まれるプレフィックスを指定できます。 この場合、指定されたプレフィックスを含む名前のディレクトリと、ディレクトリ内のすべてのオブジェクトが削除されます。 たとえば、ログディレクトリとそのディレクトリ内のすべてのオブジェクトをexamplebucketから削除するには、プレフィックスをlog/ に設定します。

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
java.io.UnsupportedEncodingExceptionをインポートします。impor t java.net.URLDecoder;
java.util.ArrayListをインポートします。java.util.Listをインポートします。public classデモ {

    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // セキュリティ上の理由から、プロジェクトコードにアクセス資格情報を保存しないことをお勧めします。 この例では、アクセス資格情報は環境変数から取得されます。 サンプルコードを実行する前に、環境変数が設定されていることを確認してください。 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。 例: examplebucket. 
        String bucketName = "examplebucket";
        // ディレクトリの絶対パスを指定します。 絶対パスにバケット名を含めないでください。 
        文字列directoryName = "exampledir";
        // 削除するディレクトリのフルパスを指定します。 バケット名をフルパスに含めないでください。 
        最終的な文字列プレフィックス="log/";

        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        try {
            // メソッド1: deleteDirectoryを呼び出して、ディレクトリを再帰的に削除します。 このメソッドを使用してディレクトリを削除する前に、階層名前空間機能を有効にする必要があります。 
            DeleteDirectoryRequest deleteDirectoryRequest = new DeleteDirectoryRequest(bucketName, directoryName);
            deleteDirectoryRequest.setDeleteRecursive(true);
            DeleteDirectoryResult deleteDirectoryResult = ossClient.de leteDirectory(deleteDirectoryRequest);

            // 削除結果を表示します。 
            // 一度に最大100のディレクトリとオブジェクトを削除できます。 ディレクトリとオブジェクトの一部のみが削除された場合、サーバーはnextDeleteTokenを返します。 nextDeleteTokenを使用して、残りのデータを引き続き削除できます。 
            // nextDeleteTokenは、次の削除操作が開始されるオブジェクトまたはディレクトリをサーバーが見つけるのに役立ちます。 
            文字列nextDeleteToken = deleteDirectoryResult.getNextDeleteToken();
            System.out.println("delete next token:" + nextDeleteToken);
            // 削除されたディレクトリの絶対パスを表示します。 
            System.out.println("delete dir name :" + deleteDirectoryResult.getDirectoryName());
            // 削除されたオブジェクトとディレクトリの総数を表示します。 
            System.out.println("delete number:" + deleteDirectoryResult.getDeleteNumber());


            // メソッド2: listObjectsを呼び出して、ディレクトリとディレクトリ内のすべてのオブジェクトをトラバースして削除します。 
            String nextMarker = null;
            ObjectListing objectListing = null;
            do {
                ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName)
                        . withPrefix(prefix)
                        . withMarker(nextMarker);

                objectListing = ossClient.listObjects(listObjectsRequest);
                if (objectListing.getObjectSummaries().size() > 0) {
                    List<String> keys = new ArrayList<String>();
                    for (OSSObjectSummary s : objectListing.getObjectSummaries()) {
                        System.out.println("key name: " + s.getKey());
                        keys.add(s.getKey());
                    }
                    DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucketName).withKeys(keys).withEncodingType("url");
                    DeleteObjectsResult deleteObjectsResult = ossClient.de leteObjects(deleteObjectsRequest);
                    List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
                    try {
                        for(String obj : deletedObjects) {
                            文字列deleteObj = URLDecoder.deコード (obj、"UTF-8");
                            System.out.println(deleteObj);
                        }
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                }

                nextMarker = objectListing.getNextMarker();
            } while (objectListing.isTruncated());
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            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';
}

OSS\OssClientを使用します。OSS\Core\OssExceptionを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
$end point = "yourEndpoint";
// バケットの名前を指定します。 
$bucket = "examplebucket";

try {
   $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
   $option=配列 (
      OssClient::OSS_MARKER => null、
      // 削除するディレクトリのフルパスを指定します。 バケット名をフルパスに含めないでください。 
      OssClient::OSS_PREFIX => "log/" 、
      OssClient::OSS_DELIMITER=>''、
   );
   $bool = true;
   while ($bool){
      $result = $ossClient->listObjects($bucket,$option);
      $objects = array();
      if(count($result->getObjectList()) > 0){
         foreach ($result->getObjectList() as $key => $info){
            printf("key name:".$info->getKey().PHP_EOL);
            $objects[] = $info->getKey();
         }
         // ディレクトリとディレクトリ内のすべてのオブジェクトを削除します。 
         $delObjects = $ossClient->deleteObjects($bucket, $objects);
         foreach ($delObjects as $info){
            $obj = strval($info);
            printf("Delete".$obj." : Success") 。 PHP_EOL);
         }
      }

      if($result->getIsTruncated() === 'true'){
         $option[OssClient::OSS_MARKER] = $result->getNextMarker();
      }else{
         $bool = false;
      }
   }
   printf (「オブジェクトの削除: OK」) 。 PHP_EOL);
} catch (OssException $e) {
   printf (「オブジェクトの削除: 失敗」) 。 PHP_EOL);
   printf($e->getMessage()) 。 PHP_EOL);
   戻ります。} 
const OSS = require('ali-OSS ');

const client = new OSS({
  // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを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'
});

// リクエストの失敗を処理し、promise.allの中断を防ぎ、失敗の原因と削除に失敗したオブジェクトの名前を返します。 
async関数handleDel (名前、オプション) {
  try {
    client.de lete(name) を待っています。
  } catch (エラー) {
    error.failObjectName = name;
    戻りエラー。
  }
}

// 一度に複数のオブジェクトを削除します。 
async関数deletePrefix(prefix) {
  const list = await client.list({
    prefix: prefix,
  });

  list.objects = list.objects | | [];
  const result = await Promise.all(list.objects.map((v) => handleDe l(v.name)));
  console.log (結果);
}
// ディレクトリとディレクトリ内のすべてのオブジェクトを削除します。 
deletePrefix('log/')
# -*- coding: utf-8 -*-
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート

# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
# バケットの名前を指定します。 
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'examplebucket')
prefix = "exampledir/"

# ディレクトリとディレクトリ内のすべてのオブジェクトを削除します。 
oss2.ObjectIteratorのobjの場合 (バケット、プレフィックス=プレフィックス):
    bucket.de lete_object(obj.key) 
パッケージメイン

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

    // Create an OSSClient instance. 
    // バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。 
    client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // バケットの名前を指定します。 
    bucket, err := client.Bucket("examplebucket")
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    
    marker := oss.Marker("")
    // 削除するディレクトリのフルパスを指定します。 バケット名をフルパスに含めないでください。 
    プレフィックス:= oss. prefix ("log/")
    count := 0
    for {
        lor, err := bucket.ListObjects(marker, prefix)
        if err! =nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }

        objects := []string{}
        _, object := range lor.Objects {
            objects = append(objects, object.Key)
        }
        // ディレクトリとディレクトリ内のすべてのオブジェクトを削除します。 
        // oss.DeleteObjectsQuietパラメーターをtrueに設定します。 この設定は、オブジェクトが削除された後、OSSがメッセージを返さないことを示します。 
        delRes, err := bucket.DeleteObjects(objects, oss.DeleteObjectsQuiet(true))
        if err! =nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }

        len(delRes.DeletedObjects) > 0 {
            fmt.Println("these objects deleted failure,", delRes.DeletedObjects)
            os.Exit(-1)
        }

        count += len (オブジェクト)

        prefix = oss.Prefix(lor.Prefix)
        marker = oss.Marker(lor.NextMarker)
        if! lor.IsTruncated {
            break
        }
    }
    fmt.Printf("success,total delete object count:% d\n", count)
} 
#include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。int main(void)
{
    /* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
            
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
    std::string Endpoint = "yourEndpoint";
    /* バケットの名前を指定します。 */
    std::string BucketName = "examplebucket";
    /* 削除するディレクトリのフルパスを指定します。 バケット名をフルパスに含めないでください。 */
    std::string keyPrefix = "log/";

    /* ネットワークリソースなどのリソースを初期化します。 */
    InitializeSdk();

    ClientConfiguration conf;
    /* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClientクライアント (Endpoint, credentialsProvider, conf);

    std::string nextMarker = "";
    bool isTruncated = false;
    do {            
            ListObjectsRequestリクエスト (BucketName);            
            request.setPrefix(keyPrefix);
            request.setMarker(nextMarker);
            auto outcome = client.ListObjects (リクエスト);

            if (!outcome.isSuccess()) {
                /* 例外を処理します。 */
                std::cout << "ListObjects fail" <<
                ",code:" << outcome.error().Code() <<
                ",message:" << outcome.error().Message() <<
                ",requestId:" << outcome.error().RequestId() << std::endl;
                break;
            }
            for (const auto& object : outcome.result().ObjectSummarys()) {
                DeleteObjectRequestリクエスト (BucketName, object.Key());
                /* ディレクトリとディレクトリ内のすべてのオブジェクトを削除します。 */
                auto delResult = client.DeleteObject (リクエスト);
            }
            nextMarker = outcome.result().NextMarker();
            isTruncated = outcome.result().IsTruncated();
    } while (isTruncated);

    /* ネットワークリソースなどのリソースをリリースします。 */
    ShutdownSdk();
    0を返します。} 

ossutil の使用

ossutilでは、rmコマンドのprefixオプションにディレクトリ名を指定してディレクトリを削除できます。 詳細は、「rm」をご参照ください。

OSS APIの使用

ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「DeleteObjectおよびDeleteDirectory」をご参照ください。

ディレクトリのサイズの照会

ディレクトリ内のオブジェクトの合計サイズを照会するには、いくつかの方法を使用できます。

OSS コンソールの使用

  1. OSSコンソールにログインします。

  2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

  3. オブジェクト ページで、サイズを照会するディレクトリを見つけ、[オブジェクトサイズ] 列の更新アイコンをクリックします。

    filesize.jpg

    次の例に示すように、OSSはディレクトリ内のオブジェクトの合計サイズを表示します。

    filesize2.jpg

OSS SDKの使用

次のサンプルコードは、一般的なプログラミング言語のOSS SDKを使用してディレクトリのサイズを照会する方法の例を示しています。 他のプログラミング言語のOSS SDKを使用してディレクトリのサイズを照会する方法の詳細については、「概要」をご参照ください。

Java

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;import com.aliyun.oss.OSS;
impor t com.aliyun.oss.com mon.auth.*;
impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
java.util.Listをインポートします。public classデモ {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス資格情報を取得します。 コードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。 例: examplebucket. 
        String bucketName = "examplebucket";
        // オブジェクトの名前に含まれるプレフィックスを指定します。 例: exampledir/object. ルートディレクトリ内のオブジェクトとディレクトリのサイズをトラバースする場合は、このパラメーターを空のままにします。 
        String keyPrefix = "exampledir/object";

        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            ObjectListing objectListing = null;
            do {
                // デフォルトでは、一度に100のオブジェクトまたはディレクトリがリストされます。 
                ListObjectsRequest request = new ListObjectsRequest(bucketName).withDelimiter("/").withPrefix(keyPrefix);
                if (objectListing != null) {
                    request.setMarker(objectListing.getNextMarker());
                }
                objectListing = ossClient.listObjects(request);
                List<String> folders = objectListing.getCommonPrefixes();
                for (文字列フォルダ: フォルダ) {
                    System.out.println(folder + " : " + (calculateFolderLength(ossClient, bucketName, folder) / 1024) + "KB");
                }
                List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
                for (OSSObjectSummary s : sums) {
                    System.out.println(s.getKey() + " : " + (s.getSize() / 1024) + "KB");
                }
            } while (objectListing.isTruncated());
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }

    // バケット内の特定のディレクトリにあるオブジェクトのサイズを一覧表示します。 
    private static long calculateFolderLength(OSS ossClient、String bucketName、Stringフォルダ) {
        ロングサイズ=0L;
        ObjectListing objectListing = null;
        do {
            // MaxKeysのデフォルト値は100です。 MaxKeysの最大値は1000です。 
            ListObjectsRequest request = new ListObjectsRequest(bucketName).withPrefix (フォルダー).withMaxKeys(1000);
            if (objectListing != null) {
                request.setMarker(objectListing.getNextMarker());
            }
            objectListing = ossClient.listObjects(request);
            List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
            for (OSSObjectSummary s : sums) {
                size += s.getSize();
            }
        } while (objectListing.isTruncated());
        return size;
    }
}

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';
}
require_once __DIR__。 '/Common.php';
OSS\Credentials\EnvironmentVariableCredentialsProviderを使用します。OSS\OssClientを使用します。OSS\CoreOssExceptionを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。  
$provider = new EnvironmentVariableCredentialsProvider();
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
$end point = "https://oss-cn-hangzhou.aliyuncs.com";
// バケットの名前を指定します。 例: examplebucket. 
$bucket= "examplebucket";

$config=配列 (
        "provider" => $provider、
        "endpoint" => $end ポイント、
    );
    $ossClient = new OssClient($config);
// ディレクトリ名をfun /に設定します。 
$prefix = 'fun/';
$delimiter = '';
$nextMarker = '';
$maxkeys = 1000;
$options=配列 (
    'delimiter' => $delimiter,
    'prefix' => $prefix,
    'max-keys' => $maxkeys,
    'marker' => $nextMarker、);
$bool = true;
$size = 0;
while ($bool){
    $result = $ossClient->listObjects($bucket,$options);
    foreach ($objInfoとして $result->getObjectList()) {
        printf("オブジェクト名".$objInfo->getKey().":" 。 ($objInfo->getSize() / 1024) 。 "KB".PHP_EOL);
        $size +=$objInfo->getSize();
    }
    if($result->getIsTruncated() === 'true'){
        $options['marker'] = $result->getNextMarker();
    }else{
        $bool = false;
    }
}
printf($prefix.":" ($サイズ /1024) 。 "KB".PHP_EOL); 

Python

# -*-コーディング: utf-8 -*-
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート

def CalculateFolderLength (バケット、フォルダ):
    length = 0
    oss2.ObjectIterator (バケット、プレフィックス=フォルダ) のobjの場合:
        length += obj.size
    リターンの長さ
# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
# バケットの名前を指定します。 例: examplebucket. 
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'examplebucket')

oss2.ObjectIteratorのobjの場合 (bucket, delimiter='/'):
    if obj.is_prefix(): # objがディレクトリとして決定された場合に実行する操作を指定します。 
        length = CalculateFolderLength (バケット、obj.key)
        print('directory: '+ obj.key +' length:'+ str(length) + "Byte.")
    else: # objがオブジェクトとして決定された場合に実行する操作を指定します。 
        print('file:'+ obj.key +' length:'+ str(obj.size) + "Byte.") 

行く

パッケージメイン
import (import (import)
    "fmt"
    "github.com/aliyun/aliyun-oss-go-sdk/oss"
    "os"
)
func HandleError (エラーエラー) {
    fmt.Println("Error:", err)
    os.Exit(-1)
}
func main() {
    // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // Create an OSSClient instance. 
    // バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。 
    client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    // バケットの名前を指定します。 
    bucket, err := client.Bucket("yourBucketName")
    if err! =nil {
        HandleError(err)
        os.Exit(-1)
    }
    // ディレクトリ内のオブジェクトのサイズを一覧表示します。 
    プレフィックス:= "test/"
    marker := ""
    for {
        lsRes, err := bucket.ListObjects(oss.Prefix(prefix),oss.Marker(marker))
        if err! =nil {
           HandleError(err)
           os.Exit(-1)
        }
        _,object := range lsRes.Objects {
           fmt.Println("Objects",object.Key, "length",object.Size ,"Byte")
        }
        if lsRes.IsTruncated {
           marker = lsRes.NextMarker
           prefix = lsRes.Prefix
        }else{
           break
        }
     }
}

ossutil の使用

ossutilを使用して、ディレクトリ内のオブジェクトの合計サイズを照会できます。 詳細については、「指定されたディレクトリ内の現在のバージョンのオブジェクトの合計サイズの照会」をご参照ください。

OSS APIの使用

ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「GetBucket (ListObjects) 」をご参照ください。