このトピックでは、バージョン管理が有効なバケットから、単一のオブジェクト、複数のオブジェクト、または名前に指定されたプレフィックスが含まれるオブジェクトを削除する方法について説明します。
バージョン管理が有効なバケットの削除操作
バージョン管理が有効なバケットからオブジェクトを削除する場合、リクエストにバージョンIDを指定するかどうかを決定する必要があります。
バージョンIDを指定せずにオブジェクトを削除する (一時削除)
デフォルトでは、リクエストで削除するオブジェクトのバージョンIDを指定しない場合、OSSはオブジェクトの現在のバージョンを削除せず、最新バージョンとしてオブジェクトに削除マーカーを追加します。 オブジェクトに対してGetObject操作を実行すると、OSSはオブジェクトの現在のバージョンを削除マーカーとして識別し、
404 Not Found
を返します。 また、レスポンスには、header:x-oss-delete-marker = true
と、削除マーカーのバージョンidを示すx-oss-version-ID
が含まれています。x-oss-delete-marker
の値がtrueの場合、x-oss-version-id
の値は削除マーカーのバージョンIDです。バージョンIDを指定してオブジェクトを削除する (永久削除)
リクエストで削除するオブジェクトのバージョンIDを指定すると、
params
で指定されたversionId
パラメーターに基づいて、指定されたバージョンのオブジェクトが完全に削除されます。 IDがnullのバージョンを削除するには、params['versionId'] = "null"
をparams
に追加します。 OSSは、削除するバージョンのIDとして文字列 "null" を識別し、IDがnullのバージョンを削除します。
一度にオブジェクトを削除する
次の例は、バージョン管理が有効なバケットからオブジェクトを永続的または一時的に削除する方法を示しています。
バージョン管理が有効なバケットからオブジェクトを完全に削除する
次のサンプルコードは、リクエストでオブジェクトのバージョンIDを指定して、バージョン管理が有効なバケットからオブジェクトを完全に削除する方法の例を示しています。
const OSS = require("ali-oss"); 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', // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. accessKeyId: process.env.OSS_ACCESS_KEY_ID, accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET, authorizationV4: true, // Specify the name of the bucket. bucket: 'yourbucketname' }); // Specify the version ID of the object. const versionId = "versionId"; // Specify the object. const objectName = "exampleobject.txt"; async function deleteVersionObject() { const result = await client.delete(objectName, { versionId, }); console.log(result); } deleteVersionObject();
バージョン管理が有効なバケットからオブジェクトを一時的に削除する
次のサンプルコードは、バージョンIDが指定されていないリクエストを送信して、バージョン管理が有効なバケットからオブジェクトを一時的に削除する方法の例を示しています。
const OSS = require('ali-oss'); 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', // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. accessKeyId: process.env.OSS_ACCESS_KEY_ID, accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET, authorizationV4: true, // Specify the name of the bucket. bucket: 'yourbucketname' }); // Temporarily delete an object without specifying its version ID. A delete marker is added to the object. // Specify the object. const objectName = "exampleobject.txt"; async function deleteObject() { const result = await client.delete(objectName); console.log(result); } deleteObject();
一度に複数のオブジェクトを削除する
次の例では、バージョン管理が有効なバケットから複数のオブジェクトを一度に永続的または一時的に削除する方法について説明します。
バージョン管理が有効なバケットから複数のオブジェクトを一度に完全に削除する
次のサンプルコードでは、リクエスト内のオブジェクトまたはマーカーの削除のバージョンIDを指定して、バージョン管理が有効なバケットから複数のオブジェクトまたはマーカーを完全に削除する方法の例を示します。
const OSS = require('ali-oss'); 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', // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. accessKeyId: process.env.OSS_ACCESS_KEY_ID, accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET, authorizationV4: true, // Specify the name of the bucket. bucket: 'yourbucketname' }); // Delete the objects with specified version IDs or the objects whose current versions are delete markers with specified version IDs. const names = [ { key: 'key1.js', versionId: 'versionId1' }, { key: 'key2.js', versionId: 'versionId2' } ]; async function deleteMulti() { const result = await client.deleteMulti(names); console.log(result); } deleteMulti();
バージョン管理が有効なバケットから一度に複数のオブジェクトを一時的に削除する
次のサンプルコードでは、バージョンIDを指定せずに、バージョン管理が有効なバケットから複数のオブジェクトを一時的に削除する方法の例を示します。 一時的に削除されたオブジェクトの現在のバージョンを復元できます。
const OSS = require('ali-oss'); 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', // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. accessKeyId: process.env.OSS_ACCESS_KEY_ID, accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET, authorizationV4: true, // Specify the name of the bucket. bucket: 'yourbucketname' }); const names = ['key1.js', 'key2.js']; async function deleteMulti() { // Delete multiple objects without specifying their version IDs. const result = await client.deleteMulti(names); console.log(result); } deleteMulti();
指定されたプレフィックスを含む名前のオブジェクトを削除する
次のサンプルコードは、名前に指定されたプレフィックスが含まれるオブジェクトを削除する方法の例を示しています。
const OSS = require("ali-oss");
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',
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// Specify the name of the bucket.
bucket: 'yourbucketname'
});
// Specify the prefix in the names of the objects that you want to delete.
const prefix = "test";
async function deleteMutiPrefix() {
// List the versions of the objects whose names contain the specified prefix.
const list = await client.getBucketVersions({
prefix: prefix,
});
for (let i = 0; i < list.objects.length; i++) {
const obj = list.objects[i];
// Delete the objects whose names contain the specified prefix.
const versionId = obj.versionId;
await client.delete(obj.name, {
versionId,
});
}
}
deleteMutiPrefix();
関連ドキュメント
オブジェクトを削除するために呼び出すことができるAPI操作の詳細については、「DeleteObject」をご参照ください。
複数のオブジェクトを削除するために呼び出すことができるAPI操作の詳細については、「DeleteMultipleObjects」をご参照ください。