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

Object Storage Service:オブジェクトの一覧表示

最終更新日:Dec 19, 2023

このトピックでは、バケット内のすべてのオブジェクトと、バケットの指定されたディレクトリ内のオブジェクトおよびサブディレクトリを一覧表示する方法について説明します。

使用状況ノート

  • WebpackやBrowserifyなどのパッケージングツールを使用する場合は、npm install ali-OSSコマンドを実行して、oss SDK for Browser.jsをインストールします。

  • ブラウザからOSSバケットにアクセスしたいが、バケットにCORSルールが設定されていない場合、ブラウザはリクエストを拒否します。 したがって、ブラウザからバケットにアクセスする場合は、バケットのCORSルールを設定する必要があります。 詳細については、「インストール」をご参照ください。

  • ほとんどの場合、ブラウザではOSS SDK for Browser.jsが使用されます。 AccessKeyペアが公開されないようにするには、Security Token Service (STS) から取得した一時的なアクセス資格情報を使用してOSSにアクセスすることを推奨します。

    一時的なアクセス資格情報は、AccessKeyペアとセキュリティトークンで構成されます。 AccessKeyペアは、AccessKey IDとAccessKeyシークレットで構成されます。 一時的なアクセス資格情報を取得する方法の詳細については、「一時的なアクセス権限付与にSTSを使用する」をご参照ください。

バケット内のすべてのオブジェクトの一覧表示

次のコードは、list関数を使用して現在のバケット内のすべてのオブジェクトを一覧表示する方法の例を示しています。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title> ドキュメント </title>
    <script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"></script>
  </head>
  <body>
    <script>      
      const client = new OSS({
        // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンをoss-cn-Hangzhouに設定します。 
        region: "yourRegion" 、
        // STSから取得した一時的なAccessKeyペアを指定します。 AccessKeyペアは、AccessKey IDとAccessKeyシークレットで構成されます。 
        accessKeyId: 'yourAccessKeyId' 、
        accessKeySecret: 'yourAccessKeySecret' 、
        // STSから取得したセキュリティトークンを指定します。 
        stsToken: 'yourSecurityToken' 、
        // バケットの名前を指定します。 例: examplebucket. 
        bucket: "examplebucket" 、
      });

      async関数リスト (dir) {
        try {
          // デフォルトでは、最大1,000個のオブジェクトが一覧表示されます。 
          let result = await client.list();
          console.log (結果);

          // リスト操作は、前のリスト操作で停止した最後のオブジェクトから続行されます。 
          if (result.isTruncated) {
            let result = await client.list({ marker: result.nextMarker });
          }

          // 名前がプレフィックス 'ex' で始まるオブジェクトを一覧表示します。 
          result = await client.list({
            プレフィックス: "ex" 、
          });
          console.log (結果);

          // 名前が接頭辞 'ex' で始まり、'example' オブジェクトの後にアルファベット順にあるすべてのオブジェクトをリストします。 
          result = await client.list({
            プレフィックス: "ex" 、
            マーカー: "example" 、
          });
          console.log (結果);
        } catch (e) {
          console.log(e);
        }
      }

      list();
    </script>
  </body>
</html>
          

ディレクトリ内のオブジェクトとサブディレクトリの一覧表示

OSSはオブジェクトに階層構造を使用せず、代わりにフラット構造を使用します。 すべての要素は、オブジェクトとしてバケットに保存されます。 ただし、OSSはオブジェクトをグループ化し、管理を簡素化する概念としてディレクトリをサポートしています。 ディレクトリは、名前がスラッシュ (/) で終わり、サイズが0のオブジェクトです。 このオブジェクトは、アップロードとダウンロードが可能です。 コンソールには、名前がスラッシュ (/) で終わるオブジェクトがディレクトリとして表示されます。 DelimiterパラメーターとPrefixパラメーターを一緒に使用して、次の方法でディレクトリをシミュレートできます。

  • リクエストでPrefixがディレクトリ名に設定されている場合、ディレクトリ内のすべてのオブジェクトとサブディレクトリを含む、このプレフィックスを名前が含むオブジェクトが一覧表示されます。

  • リクエストでDelimiterパラメーターをスラッシュ (/) に設定すると、ディレクトリ内のオブジェクトとサブディレクトリのみが一覧表示されます。 サブディレクトリはSubDir要素にリストされ、再帰オブジェクトとこれらのサブディレクトリ内のディレクトリは除外されます。

次のオブジェクトが特定のバケットに保存されているとします。

foo/x
foo/y
foo /バー /a
foo /バー /b
foo/hello/C/1
foo/hello/C/2
...
foo/hello/C/9999
            

次のコードでは、listDir関数を使用して、バケットの特定のディレクトリにあるオブジェクトとサブディレクトリを一覧表示する方法の例を示します。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title> ドキュメント </title>
    <script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"></script>
  </head>
  <body>
    <script>
      const client = new OSS({
        // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンをoss-cn-Hangzhouに設定します。 
        リージョン: 'yourRegion' 、
        // STSから取得した一時的なAccessKeyペアを指定します。 AccessKeyペアは、AccessKey IDとAccessKeyシークレットで構成されます。 
        accessKeyId: 'yourAccessKeyId' 、
        accessKeySecret: 'yourAccessKeySecret' 、
        // STSから取得したセキュリティトークンを指定します。 
        stsToken: 'yourSecurityToken' 、
        // バケットの名前を指定します。 例: examplebucket. 
        bucket: "examplebucket" 、
      });

      async関数listDir(dir) {
        try {
          let result = await client.list({
            プレフィックス: dir、
            // 区切り文字をスラッシュ (/) に設定します。 
            delimiter: "/" 、
          });

          result.prefixes.forEach(function (subDir) {
            console.log("SubDir: % s", subDir);
          });
          result.objects.forEach(function (obj) {
            console.log("Object: % s" 、obj.name);
          });
        } catch (e) {
          console.log(e);
        }
      }

      listDir();
    </script>
  </body>
</html>

次のオブジェクトが返されます。

> listDir('foo/')
=> SubDir: foo /バー /
   SubDir: foo/hello /
   オブジェクト: foo/x
   オブジェクト: foo/y

> listDir('foo/bar/')
=> オブジェクト: foo/bar/a
   オブジェクト: foo/bar/b

> listDir('foo/hello/C/')
=> オブジェクト: foo/hello/C/1
   オブジェクト: foo/hello/C/2
   ...
   オブジェクト: foo/hello/C/9999 

参考資料

オブジェクトを一覧表示するために呼び出すAPI操作の詳細については、「GetBucket (ListObjects) 」をご参照ください。