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

Object Storage Service:シンボリックリンクの作成

最終更新日:Jun 28, 2025

シンボリックリンクは Windows のショートカットに似ており、CloudBox バケット上の Object Storage Service (OSS) 内の頻繁に使用するオブジェクトにすばやくアクセスできます。 PutSymlink 操作を呼び出してオブジェクトのシンボリックリンクを設定すると、シンボリックリンクを使用してオブジェクトにすばやくアクセスできます。

使用上の注意

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

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

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

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

手順

OSS SDK の使用

OSS SDK for Java のみを使用してシンボリックリンクを作成できます。OSS SDK for Java のバージョンは 3.15.0 以降である必要があります。次のサンプルコードは、OSS SDK for Java を使用してオブジェクトのシンボリックリンクを作成する方法の例を示しています。

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 {
        // CloudBox バケット上の OSS のデータエンドポイントを指定します。
        String endpoint = "https://cb-f8z7yvzgwfkl9q0h****.cn-hangzhou.oss-cloudbox.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // CloudBox バケット上の OSS の名前を指定します。例: examplebucket。
        String bucketName = "examplebucket";
        // CloudBox バケット上の OSS が配置されているリージョンを指定します。
        String region = "cn-hangzhou";
        // クラウドボックスの 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");
            // オブジェクトのアクセス制御リスト (ACL) を指定します。
            // 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」をご参照ください。

OSS API の使用

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