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

Object Storage Service:CloudBox のシンボリックリンク

最終更新日:Nov 09, 2025

シンボリックリンク (symlink) 機能を使用すると、クラウドボックスの OSS バケット内の頻繁に使用されるオブジェクトにすばやくアクセスできます。PutSymlink 操作を呼び出してシンボリックリンクを作成すると、そのシンボリックリンクを使用してターゲットオブジェクトファイルにすばやくアクセスできます。

使用上の注意

  • PutSymlink 操作を呼び出してシンボリックリンクを作成する際、Object Storage Service (OSS) は、宛先オブジェクトが存在するかどうか、宛先オブジェクトのストレージタイプが有効かどうか、または宛先オブジェクトにアクセスできるかどうかをチェックしません。

  • GetObject などの API 操作を呼び出して宛先オブジェクトにアクセスする際、シンボリックリンクのアクセス制御リスト (ACL) と、シンボリックリンクが指す宛先オブジェクトの ACL がチェックされます。

  • PutSymlink リクエストに `x-oss-meta-` プレフィックスを持つパラメーターが含まれている場合、そのパラメーターはシンボリックリンクのユーザーメタデータと見なされます。例: `x-oss-meta-location`。オブジェクトは複数の同様のパラメーターを持つことができます。ただし、オブジェクトのすべてのユーザーメタデータの合計サイズは 8 KB を超えることはできません。

  • デフォルトでは、作成しようとしているオブジェクトがすでに存在し、既存のオブジェクトにアクセスする権限がある場合、新しいオブジェクトは既存のオブジェクトを上書きし、OSS は 200 OK を返します。

手順

Alibaba Cloud SDK の使用

シンボリックリンクは、OSS SDK for Java を使用してのみ作成できます。SDK のバージョンは 3.15.0 以降である必要があります。

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;

public class Demo {
    public static void main(String[] args) throws Exception {
        // クラウドボックスの OSS バケットのデータエンドポイントを指定します。
        String endpoint = "https://cb-f8z7yvzgwfkl9q0h****.cn-hangzhou.oss-cloudbox.aliyuncs.com";
        // 環境変数からアクセス資格情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // クラウドボックスの OSS バケットの名前を指定します。例: examplebucket。
        String bucketName = "examplebucket";
        // クラウドボックスの OSS バケットが配置されているリージョンを指定します。
        String region = "cn-hangzhou";
        // CloudBox ID を指定します。
        String cloudBoxId = "cb-f8z7yvzgwfkl9q0h****";
        // シンボリックリンクの名前を指定します。
        String symLink = "yourSymLink";
        // シンボリックリンクが指すオブジェクトファイルの名前を指定します。
        String destinationObjectName = "yourDestinationObjectName";

        // OSSClient インスタンスを作成します。
        // OSSClient インスタンスが不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
        conf.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(new DefaultCredentialProvider(credentialsProvider.getCredentials()))
                .clientConfiguration(conf)
                .region(region)
                .cloudBoxId(cloudBoxId)
                .build();

        try {
            // シンボリックリンクのメタデータを設定します。
            // ObjectMetadata metadata = new ObjectMetadata();
            // metadata.setContentType("text/plain");
            // カスタムメタデータプロパティの値を property-value に設定します。
            // metadata.addUserMetadata("property", "property-value");

            // シンボリックリンクの作成時に同じ名前のオブジェクトを上書きするかどうかを指定します。
            // metadata.setHeader("x-oss-forbid-overwrite", "true");
            // オブジェクトのアクセス権限を指定します。
            // metadata.setHeader(OSSHeaders.OSS_OBJECT_ACL, CannedAccessControlList.Default);
            // オブジェクトのストレージタイプを指定します。
            // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard);

            // CreateSymlinkRequest オブジェクトを作成します。
            CreateSymlinkRequest createSymlinkRequest = new CreateSymlinkRequest(bucketName, symLink, destinationObjectName);

            // メタデータを設定します。
            // createSymlinkRequest.setMetadata(metadata);

            // シンボリックリンクを作成します。
            ossClient.createSymlink(createSymlinkRequest);

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

ossutil の使用

ossutil を使用してシンボリックリンクを作成する方法の詳細については、「put-symlink」をご参照ください。

REST API の使用

プログラムに高度なカスタマイズが必要な場合は、REST API リクエストを直接行うことができます。これには、署名を計算するためのコードを手動で記述する必要があります。詳細については、「PutSymlink」をご参照ください。