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

Object Storage Service:命名規則に基づいてオブジェクトの名前を変更する

最終更新日:Feb 21, 2024

Object Storage Service (OSS) のデータ移行または再編成中に、新しいディレクトリ標準に基づいてオブジェクトの名前を変更し、名前の一貫性と構造の正確性を確保できます。 バケットの階層名前空間機能を有効にすると、バケット内のオブジェクトの名前を変更できます。 このトピックでは、オブジェクトの名前を変更する方法について説明します。

シナリオ

  • 命名規則の適用: データ管理の効率と一貫性を高めるために新しいオブジェクト命名規則を実装するには、既存のオブジェクトの名前を変更してこれらの規則に合わせる必要があります。

  • データの移行と再編成: ディレクトリ構造の調整、システムの移行、またはアプリケーションのアップグレードの場合、OSSに保存されているデータを移動または再編成する必要があります。つまり、オブジェクトの名前を変更する必要があります。

  • ストレージレイアウトの最適化: データの取得を高速化し、ストレージディレクトリ構造を最適化するために、オブジェクトの名前を変更する必要がある場合があります。

使用上の注意

  • バケットの階層名前空間機能が有効になっている場合は、名前の変更操作を呼び出して、バケット内のオブジェクトの名前を変更できます。

    詳細については、「階層名前空間の使用」をご参照ください。

  • バケットの階層名前空間機能が有効になっていない場合、バケット内のオブジェクトの名前を直接変更することはできません。 バケット内のオブジェクトの名前を変更するには、CopyObject操作を呼び出してソースオブジェクトを宛先オブジェクトにコピーし、DeleteObject操作を呼び出してソースオブジェクトを削除します。

  • OSS-HDFSの安定性を維持し、データの損失を防ぐために、の名前を変更しないでください。階層的な名前空間とOSS-HDFSが有効になっているバケットのdlsdata/ ディレクトリ。

手順

OSSコンソールの使用

任意のサイズのオブジェクトの名前を変更できますが、OSSコンソールを使用して1 GB以下のオブジェクトのみを移動できます。

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

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

  3. オブジェクトの名前を変更します。

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

      左側のナビゲーションツリーで、ファイル > オブジェクト を選択します。 名前を変更するオブジェクトの上にポインタを移動し、アイコンをクリックしeditてオブジェクトの名前を変更します。 オブジェクトの名前を変更するときは、オブジェクト名にサフィックスが含まれていることを確認してください。

    • バケットの階層名前空間機能が有効になっています。

      左側のナビゲーションツリーで、ファイル > オブジェクト を選択します。 次に、オブジェクトの名前を変更するか移動します。

      API 操作

      説明

      オブジェクトの名前変更

      名前を変更するオブジェクトの上にポインタを移動し、アイコンをクリックしeditてオブジェクトの名前を変更します。 オブジェクトの名前を変更するときは、オブジェクト名にサフィックスが含まれていることを確認してください。

      オブジェクトを移動する

      移動するオブジェクトの 操作 列で、詳細 > ファイルの移動 を選択します。 ファイルの移動 パネルで、オブジェクトの移動先ディレクトリを指定します。

      • オブジェクトを現在のバケットのルートディレクトリに移動するには、移動先ディレクトリを空のままにします。

      • 現在のバケット内のディレクトリにオブジェクトを移動するには、そのディレクトリを移動先ディレクトリとして指定します。 たとえば、destdirという名前のディレクトリ内のsubdirという名前のサブディレクトリにオブジェクトを移動するには、移動先ディレクトリをdestdir/subdirに設定します。

OSS SDKの使用

次のサンプルコードでは、examplebucketバケットのsrcobject.txtの名前をdestobject.txtに変更する方法の例を示します。

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.RenameObjectRequestをインポートします。public classデモ {

    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // プロジェクトコードにアクセス資格情報を保存しないことをお勧めします。 そうしないと、アクセス資格情報が漏洩する可能性があります。 その結果、アカウント内のすべてのリソースのセキュリティが侵害されます。 この例では、アクセス資格情報は環境変数から取得されます。 サンプルコードを実行する前に、環境変数が設定されていることを確認してください。 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。 
        String bucketName = "examplebucket";
        // ソースオブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 
        文字列sourceObject = "srcobject.txt";
        // 宛先オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 
        文字列destinationObject = "destobject.txt";

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

        try {
            // バケットに対して階層名前空間機能が有効になっている場合、次のサンプルコードを実行してオブジェクトの名前を変更します。 
            // バケット内のソースオブジェクトの絶対パスを宛先オブジェクトの絶対パスに変更します。 
            RenameObjectRequest renameObjectRequest = new RenameObjectRequest(bucketName, sourceObject, destinationObject);
            ossClient.renameObject(renameObjectRequest);

            // バケットの階層名前空間機能が有効になっていない場合は、次のコードを実行してオブジェクトの名前を変更します。 
            // examplebucketバケット内のsrcobject.txtオブジェクトを同じバケット内のdestobject.txtオブジェクトにコピーします。 
            // ossClient.copyObject(bucketName, sourceObject, bucketName, destinationObject);

            // srcobject.txtオブジェクトを削除します。 
            // ossClient.de leteObject(bucketName, sourceObject);
        } 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();
            }
        }
    }
} 
const OSS = require('ali-OSS ');
const client = new OSS({
  // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンをoss-cn-Hangzhouに設定します。 
  リージョン: 'oss-cn-hangzhou' 、
  // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、環境変数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関数renameObject() {
  try {
    // srcobject.txtオブジェクトを同じバケット内のdestobject.txtオブジェクトにコピーします。 
    const r = await client.copy('destobject.txt '、'srcobject.txt');
    console.log ('Copied', r);
    // srcobject.txtオブジェクトを削除します。 
    const deleteResult = await client.delete('srcobject.txt ');
    console.log(deleteResult);
  } catch (e) {
    console.log(e);
  }
}

renameObject();
# -*- 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に設定します。 
endpoint = 'https:// oss-cn-hangzhou.aliyuncs.com'
# バケットの名前を指定します。 例: examplebucket. 
bucket_name = 'examplebucket'
bucket = oss2.Bucket(auth、endpoint、bucket_name)

# ソースオブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: srcobject.txt。 
src_object_name = 'srcobject.txt'
# 宛先オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: destobject.txt。 
dest_object_name = 'destobject.txt'

# examplebucket内のsrcobject.txtオブジェクトを同じバケット内のdestobject.txtオブジェクトにコピーします。 
result = bucket.copy_object(bucket_name, src_object_name, dest_object_name)

# レスポンスを表示します。 HTTPステータスコード200が返された場合、操作は成功です。 
print('result.status:', result.status)

# srcobject.txtオブジェクトを削除します。 
result_del = bucket.de lete_object(src_object_name)

# レスポンスを表示します。 HTTPステータスコード204が返された場合、操作は成功です。 
print('result.status:', result_del.status) 
// バケットの名前を指定します。 
String bucketName = "examplebucket";
// ソースオブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: srcobject.txt。 
文字列sourceObjectKey = "srcobject.txt";
// 宛先オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: destobject.txt。 
String objectKey = "destobject.txt";
try {
    CopyObjectRequest copyObjectRequest = new CopyObjectRequest(bucketName, sourceObjectKey, bucketName, objectKey);
    oss.copyObject(copyObjectRequest);
    // srcobject.txtオブジェクトを削除します。 
    DeleteObjectRequest deleteObjectRequest = new DeleteObjectRequest(bucketName, sourceObjectKey);
    oss.de leteObject(deleteObjectRequest);
} catch (ClientException e) {
    // ネットワークエラーなどのクライアント側の例外を処理します。 
    e.printStackTrace();
} catch (ServiceException e) {
    // サーバー側の例外を処理します。 
    Log.e("RequestId", e.getRequestId());
    Log.e("ErrorCode", e.getErrorCode());
    Log.e("HostId", e.getHostId());
    Log.e("RawMessage", e.getRawMessage());
} 
パッケージメイン

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 {
        handleError(err)
    }
    // バケットの名前を指定します。 
    bucket, err := client.Bucket("examplebucket")
    if err! =nil {
        handleError(err)
    }
    // ソースオブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 
    srcObject := "srcobject.txt"
    // 宛先オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 
    destObject := "destobject.txt"
    // examplebucket内のsrcobject.txtオブジェクトを同じバケット内のdestobject.txtオブジェクトにコピーします。 
    _,err = bucket.CopyObject(srcObject,destObject)
    if err! =nil {
        handleError(err)
    }
    // srcobject.txtオブジェクトを削除します。 
    err = bucket.DeleteObject(srcObject)
    if err! =nil {
        handleError(err)
    }

    fmt.Print(srcObject + "has renamed" + destObject)
} 
// バケット名を指定します。 
NSString * bucketName = @ "examplebucket";
// ソースオブジェクトのフルパスを指定します。 オブジェクトのフルパスにバケット名を含めることはできません。 例: srcobject.txt。 
NSString * sourceObjectKey = @ "sourceObjectKey";
// 宛先オブジェクトのフルパスを指定します。 オブジェクトのフルパスにバケット名を含めることはできません。 例: destobject.txt。 
NSString * objectKey = @ "destobject.txt";
[[[OSSTask taskWithResult:nil] continueWithBlock:^ id _Nullable(OSSTask * _Nonnull task) {
    // examplebucket内のsrcobject.txtオブジェクトを同じバケット内のdestobject.txtオブジェクトにコピーします。 
    OSSCopyObjectRequest * copyRequest = [OSSCopyObjectRequest new];
    copyRequest.bucketName = bucketName;
    copyRequest.sourceBucketName = bucketName;
    copyRequest.sourceObjectKey = sourceObjectKey;
    copyRequest.objectKey = objectKey;
    OSSTask * copyTask = [client copyObject:copyRequest];
    [copyTask waitUntilFinished];
    if (copyTask.error) {
        copyTaskを返します。
    }
    // srcobject.txtオブジェクトを削除します。 
    OSSDeleteObjectRequest * deleteObject = [OSSDeleteObjectRequest new];
    deleteObject.bucketName = bucketName;
    deleteObject.objectKey = sourceObjectKey;
    OSSTask * deleteTask = [client deleteObject:deleteObject];
    [deleteTask waitUntilFinished];
    if (deleteTask.error) {
        deleteTaskを返します。
    }
    nilを返します。}] continueWithBlock:^ id _Nullable(OSSTask * _Nonnullタスク) {
    if (task.error) {
        NSLog(@ "名前変更失敗! エラー: % @ ", task.error);
    } else {
        NSLog(@ "成功の名前を変更!");
    }
    nilを返します。}]; 

他のプログラミング言語のOSS SDKを使用してオブジェクトの名前を変更する方法の詳細については、「概要」をご参照ください。

OSS APIの使用

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

参考資料

  • ダウンロード時にオブジェクトの名前を変更する場合は、オブジェクトの名前を直接変更するのではなく、事前署名されたURLまたはオブジェクトメタデータを使用することをお勧めします。 コピーおよび削除操作を使用してオブジェクトの名前を変更すると、追加料金が発生し、ソースオブジェクト名に依存するアプリケーションでエラーが発生する可能性があります。 詳細については、「ダウンロードしたオブジェクトの名前の指定」をご参照ください。

  • ディレクトリの名前を変更する方法の詳細については、「ディレクトリの名前変更」をご参照ください。