Object Storage Service (OSS) でデータを移行または再編成する場合、データ編成、命名の一貫性、およびデータ構造の要件を満たすようにオブジェクトの名前を変更できます。 バケットの階層名前空間機能が有効になっている場合、バケット内のオブジェクトの名前を直接変更できます。 このトピックでは、オブジェクトの名前を変更する方法について説明します。
シナリオ
命名規則の適用: データ管理の効率と一貫性を高めるために新しいオブジェクト命名規則を実装するには、既存のオブジェクトの名前を変更してこれらの規則に合わせる必要があります。
データの移行と再編成: 構造の調整、システムの移行、またはアプリケーションのアップグレードの場合、OSSに保存されているデータを移動または再編成する必要があります。
ストレージレイアウトの最適化: オブジェクトの名前変更は、データの取得を高速化し、ストレージディレクトリ構造を最適化します。
使用上の注意
バケットの階層名前空間機能が有効になっている場合は、名前の変更操作を呼び出して、バケット内のオブジェクトの名前を変更できます。
詳細については、「階層名前空間の使用」をご参照ください。
バケットの階層名前空間機能が有効になっていない場合、バケット内のオブジェクトの名前を直接変更することはできません。 バケット内のオブジェクトの名前を変更するには、CopyObject操作を呼び出してソースオブジェクトを宛先オブジェクトにコピーし、DeleteObject操作を呼び出してソースオブジェクトを削除します。
OSS-HDFSの安定性を維持し、データの損失を防ぐために、
. dlsdata /
階層的な名前空間とOSS-HDFSが有効になっているバケットのディレクトリ。
手順
OSSコンソールの使用
任意のサイズのオブジェクトの名前を変更できますが、OSSコンソールを使用して1 GB以下のオブジェクトのみを移動できます。
にログインします。OSSコンソール.
左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。
オブジェクトの名前を変更します。
バケットの階層名前空間機能が有効になっていない
左側のナビゲーションツリーで、ファイル > オブジェクト を選択します。 名前を変更するオブジェクトの上にポインタを移動し、アイコンをクリックしてオブジェクトの名前を変更します。 オブジェクトの名前を変更するときは、オブジェクト名に拡張子が含まれていることを確認してください。
バケットの階層名前空間機能が有効になっています。
左側のナビゲーションツリーで、ファイル > オブジェクト を選択します。 次に、オブジェクトの名前を変更するか移動します。
API 操作
ステップ
オブジェクトの名前変更
名前を変更するオブジェクトの上にポインタを移動し、アイコンをクリックしてオブジェクトの名前を変更します。 オブジェクトの名前を変更するときは、オブジェクト名に拡張子が含まれていることを確認してください。
オブジェクトを移動する
オブジェクトリストで移動するオブジェクトを見つけ、操作 列の 詳細 > ファイルの移動 を選択します。 ファイルの移動 パネルで、オブジェクトの移動先ディレクトリを指定します。
オブジェクトをバケットのルートディレクトリに移動するには、移動先ディレクトリを空のままにします。
オブジェクトをバケット内のディレクトリに移動するには、そのディレクトリを移動先ディレクトリとして指定します。 たとえば、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();
}
}
}
}
<?php
if (is_file(__DIR__) 。 '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__) 。 '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
OSS\Credentials\EnvironmentVariableCredentialsProviderを使用します。OSS\OssClientを使用します。OSS\CoreOssExceptionを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
$end point = "https://oss-cn-hangzhou.aliyuncs.com";
// バケットの名前を指定します。 例: examplebucket.
$bucket= "examplebucket";
// ソースオブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: srcobject.txt。
$fromObject = "srcobject.txt";
// 宛先オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: destobject.txt。
$toObject = 'destobject.txt ';
try {
$config=配列 (
"provider" => $provider、
"endpoint" => $end ポイント、
);
$ossClient = new OssClient($config);
// srcobject.txtオブジェクトを同じバケット内のdestobject.txtオブジェクトにコピーします。
$ossClient->copyObject($bucket, $fromObject,$bucket, $toObject);
// srcobject.txtオブジェクトを削除します。
$ossClient->deleteObject($bucket, $fromObject);
} catch (OssException $e) {
printf($e->getMessage()) 。 "\n");
戻ります。}
print("Object".$fromObject ."Rename complete") 。 PHP_EOL);
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を使用してオブジェクトの名前を変更する方法の詳細については、「概要」をご参照ください。
ossbrowserを使う
ossbrowserを使用して、OSSコンソールで実行できるのと同じバケットレベルの操作を実行できます。 ossbrowserの画面上の指示に従って、オブジェクトの名前を変更できます。 ossbrowserの使用方法の詳細については、「ossbrowserの使用」をご参照ください。
OSS APIの使用
ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、以下をご参照ください。 名前を変更します。
参考資料
オブジェクトのダウンロード時にオブジェクトの名前を変更する場合は、署名付きURLを使用するか、オブジェクトのメタデータ設定を変更することをお勧めします。 コピーおよび削除操作を使用してオブジェクトの名前を変更すると、追加料金が発生し、ソースオブジェクト名に依存するアプリケーションでエラーが発生する可能性があります。 詳細については、「ダウンロードしたオブジェクトの名前の指定」をご参照ください。
ディレクトリの名前を変更する方法の詳細については、「ディレクトリの名前変更」をご参照ください。