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

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

最終更新日:Dec 03, 2024

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

使用上の注意

  • 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を使用する」をご参照ください。

ディレクトリの作成

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"></script>
  </head>
  <body>
    <script>
      const client = OSS({
        // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou. 
        region: 'yourRegion',
        authorizationV4: true,
        // Specify the temporary AccessKey pair obtained from STS. The AccessKey pair consists of an AccessKey ID and an AccessKey secret. 
        accessKeyId: 'yourAccessKeyId',
        accessKeySecret: 'yourAccessKeySecret',
        // Specify the security token that you obtained from STS. 
        stsToken: 'yourSecurityToken',
        // Specify the name of the bucket. 
        bucket: 'examplebucket'
      });
      // Specify the name of the directory. The directory must end with a forward slash (/). 
      client
        .put("log/", new Blob([]))
        .then((r) => {
          console.log(r);
        })
        .catch((e) => {
          console.log(e);
        });
    </script>
  </body>
</html>

ディレクトリの削除

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

警告

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

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"></script>
  </head>
  <body>
    <script>
      const client = new OSS({
        // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou. 
        region: "yourRegion",
        authorizationV4: true,
        // Specify the temporary AccessKey pair obtained from STS. The AccessKey pair consists of an AccessKey ID and an AccessKey secret. 
        accessKeyId: "yourAccessKeyId",
        accessKeySecret: "yourAccessKeySecret",
        // Specify the security token that you obtained from STS. 
        stsToken: 'yourSecurityToken',
        // Specify the name of the bucket. Example: examplebucket. 
        bucket: "examplebucket",
      });

      // Handle request failures, prevent the interruption of promise.all, and return failure causes and the names of objects that fail to be deleted. 
      async function handleDel(name, options) {
        try {
          await client.delete(name);
        } catch (error) {
          error.failObjectName = name;
          return error;
        }
      }

      // Delete multiple objects. 
      async function deletePrefix(prefix) {
        const list = await client.list({
          prefix: prefix,
        });

        list.objects = list.objects || [];
        const result = await Promise.all(
          list.objects.map((v) => handleDel(v.name))
        );
        console.log(result);
      }
      // Delete the directory and all objects stored in the directory. 
      deletePrefix("log/");
    </script>
  </body>
</html>

関連ドキュメント

  • ディレクトリを作成するために呼び出すことができるAPI操作の詳細については、「PutObjectおよびCreateDirectory」をご参照ください。

  • ディレクトリとディレクトリ内のすべてのオブジェクトを削除するために呼び出すAPI操作の詳細については、「DeleteObject」をご参照ください。