リクエストでオブジェクトのバージョンIDを指定するかどうかに基づいて、バージョン管理が有効なバケットからオブジェクトを一時的または完全に削除できます。 さらに、バージョン管理が有効なバケットから、オブジェクト、複数のオブジェクト、または名前に特定のプレフィックスが含まれているオブジェクトを一時的または完全に削除できます。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSTS (Security Token Service) を使用してOSSClientインスタンスを作成する場合は、「初期化」をご参照ください。
オブジェクトを削除するには、
oss:DeleteObject
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。
バージョン管理が有効なバケットの削除操作
バージョン管理が有効なバケットからオブジェクトを削除する場合、リクエストにバージョンIDを指定するかどうかを決定する必要があります。
バージョンIDを指定せずにオブジェクトを削除する (一時削除)
デフォルトでは、リクエストで削除するオブジェクトのバージョンIDを指定しない場合、OSSはオブジェクトの現在のバージョンを削除せず、新しい現在のバージョンとしてオブジェクトに削除マーカーを追加します。 オブジェクトに対してGetObject操作を実行すると、OSSはオブジェクトの現在のバージョンを削除マーカーとして識別し、
404 Not Found
を返します。 また、レスポンスには、削除マーカーのバージョンidを示すx-oss-delete-marker
と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は、文字列 "null" を完全に削除するバージョンのIDとして識別し、IDがnullのバージョンを削除します。
オブジェクトの削除
次の例は、バージョン管理が有効なバケットからオブジェクトを永続的または一時的に削除する方法を示しています。
バージョンIDを指定してオブジェクトを完全に削除する
次のサンプルコードは、バージョンIDを指定してバージョン管理が有効なバケットからオブジェクトを完全に削除する方法の例を示しています。
パッケージメイン import (import (import) "fmt" "os" 「github.com/aliyun/aliyun-oss-go-sdk/oss」 ) 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 { fmt.Println("Error:", err) os.Exit(-1) } // バケットの名前を指定します。 bucket, err := client.Bucket("yourBucketName") if err! =nil { fmt.Println("Error:", err) os.Exit(-1) } // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 // yourObjectVersionIdをオブジェクトのバージョンIDに設定します。 このパラメーターを指定すると、指定したバージョンIDのオブジェクトが完全に削除されます。 err = bucket.DeleteObject("youObjectName", oss.VersionId("yourObjectVersionId")) if err! =nil { fmt.Println("Error:", err) os.Exit(-1) } }
バージョンIDを指定せずにオブジェクトを一時的に削除する
次のサンプルコードは、バージョンIDを指定せずにバージョン管理が有効なバケットからオブジェクトを一時的に削除する方法の例を示しています。
パッケージメイン import (import (import) "fmt" "net/http" "os" 「github.com/aliyun/aliyun-oss-go-sdk/oss」 ) func main() { /// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err! =nil { fmt.Println("Error:", err) os.Exit(-1) } // OSSClientインスタンスを作成します。 // バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。 client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider)) if err! =nil { fmt.Println("Error:", err) os.Exit(-1) } // バケットの名前を指定します。 bucket, err := client.Bucket("yourBucketName") if err! =nil { fmt.Println("Error:", err) os.Exit(-1) } var retHeader http.Header // バージョンIDを指定せずにオブジェクトを一時的に削除します。 削除マーカーがオブジェクトに追加されます。 // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 err = bucket.DeleteObject("youObjectName", oss.GetResponseHeader(&retHeader)) if err! =nil { fmt.Println("Error:", err) os.Exit(-1) } // 削除マーカーに関する情報を表示します。 fmt.Println("x-oss-version-id:", oss.GetVersionId(retHeader)) fmt.Println("x-oss-delete-marker:", oss.GetDeleteMark(retHeader)) }
複数のオブジェクトの削除
次の例は、バージョン管理が有効なバケットから複数のオブジェクトを永続的または一時的に削除したり、マーカーを削除したりする方法を示しています。
バージョンIDを指定して複数のオブジェクトを完全に削除する
次のサンプルコードでは、バージョン管理が有効なバケットからバージョンIDを指定して複数のオブジェクトを完全に削除する方法の例を示します。
パッケージメイン import (import (import) "fmt" "os" 「github.com/aliyun/aliyun-oss-go-sdk/oss」 ) 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 { fmt.Println("Error:", err) os.Exit(-1) } // バケットの名前を指定します。 bucket, err := client.Bucket("yourBucketName") if err! =nil { fmt.Println("Error:", err) os.Exit(-1) } // 削除するオブジェクトのバージョンIDを指定します。 keyArray := []oss.DeleteObject{ oss.DeleteObject{Key: "objectName1", VersionId:"objectVersionId1"}, oss.DeleteObject{Key: "objectName2", VersionId:"objectVersionId2"}, } // 指定されたバージョンIDを持つオブジェクトを削除します。 ret, err := bucket.DeleteObjectVersions(keyArray) if err! =nil { fmt.Println("Error:", err) os.Exit(-1) } // 削除されたオブジェクトに関する情報を表示します。 for _, object := range ret.DeletedObjectsDetail { fmt.Println("Key:", object.Key, "\n VersionId:", object.VersionId) } }
バージョンIDを指定して複数の削除マーカーを完全に削除する
次のサンプルコードでは、バージョン管理が有効なバケットからバージョンIDを指定して複数の削除マーカーを完全に削除する方法の例を示します。
パッケージメイン import (import (import) "fmt" "os" 「github.com/aliyun/aliyun-oss-go-sdk/oss」 ) 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 { fmt.Println("Error:", err) os.Exit(-1) } // バケットの名前を指定します。 bucket, err := client.Bucket("yourBucketName") if err! =nil { fmt.Println("Error:", err) os.Exit(-1) } // 削除する削除マーカーのバージョンIDを指定します。 keyArray := []oss.DeleteObject{ oss.DeleteObject{Key: "objectName1", VersionId:"objectVersionId1"}, oss.DeleteObject{Key: "objectName2", VersionId:"objectVersionId2"}, } // 指定された削除マーカーを削除します。 ret, err := bucket.DeleteObjectVersions(keyArray) if err! =nil { fmt.Println("Error:", err) os.Exit(-1) } // 削除マーカーに関する情報を表示します。 for _, object := range ret.DeletedObjectsDetail { fmt.Println("key:", object.Key, "\n versionId:", object.VersionId, "\n DeleteMarker:", object.DeleteMarker, "\nDeleteMarkerVersionId", object.DeleteMarkerVersionId) } }
バージョンIDを指定せずに複数のオブジェクトを一時的に削除する
次のサンプルコードでは、バージョン管理が有効なバケットからバージョンIDを指定せずに複数のオブジェクトを一時的に削除する方法の例を示します。
パッケージメイン import (import (import) "fmt" "os" 「github.com/aliyun/aliyun-oss-go-sdk/oss」 ) 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 { fmt.Println("Error:", err) os.Exit(-1) } // バケットの名前を指定します。 bucket, err := client.Bucket("yourBucketName") if err! =nil { fmt.Println("Error:", err) os.Exit(-1) } // バージョンIDを指定せずに複数のオブジェクトを一時的に削除します。 削除マーカーがオブジェクトに追加されます。 keyArray := []oss.DeleteObject{ oss.DeleteObject{Key: "objectName1"}, oss.DeleteObject{Key: "objectName2"}, } res, err := bucket.DeleteObjectVersions(keyArray) if err! =nil { fmt.Println("Error:", err) os.Exit(-1) } // オブジェクトに追加された削除マーカーに関する情報を表示します。 for _, object := range res.DeletedObjectsDetail { fmt.Println("key:", object.Key, "\n DeleteMarker:", object.DeleteMarker, "\nDeleteMarkerVersionId", object.DeleteMarkerVersionId) } }
名前に特定のプレフィックスが含まれるオブジェクトを削除する
次のサンプルコードは、名前に特定のプレフィックスが含まれているオブジェクトを削除する方法の例を示しています。
パッケージメイン
import (import (import)
"fmt"
"os"
「github.com/aliyun/aliyun-oss-go-sdk/oss」
)
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 {
fmt.Println("Error:", err)
os.Exit(-1)
}
// バケットの名前を指定します。
bucket, err := client.Bucket("yourBucketName")
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 指定されたプレフィックスを含む名前のオブジェクトを一覧表示して削除します。
プレフィックス:= oss. prefix ("yourObjectPrefix")
marker := oss.KeyMarker("")
version := oss.VersionIdMarker("")
for {
lor, err := bucket.ListObjectVersions(marker, prefix, version)
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
objects := []oss.DeleteObject{}
for _, object := range lor.ObjectDeleteMarkers {
objects = append(objects, oss.DeleteObject {
キー: object.Key,
VersionId: object.VersionId、
})
}
for _, object := range lor.ObjectVersions {
objects = append(objects, oss.DeleteObject {
キー: object.Key,
VersionId: object.VersionId、
})
}
delRes, err := bucket.DeleteObjectVersions(objects, oss.DeleteObjectsQuiet(true))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
len(delRes.DeletedObjectsDetail) > 0 {
fmt.Println("these objects deleted failure,", delRes.DeletedObjectsDetail)
os.Exit(-1)
}
prefix = oss.Prefix(lor.Prefix)
marker = oss.KeyMarker(lor.NextKeyMarker)
version = oss.VersionIdMarker(lor.NextVersionIdMarker)
if! lor.IsTruncated {
break
}
}
fmt.Printf("delete success\n")
}
参考資料
オブジェクトを削除するために呼び出すことができるAPI操作の詳細については、「DeleteObject」をご参照ください。
複数のオブジェクトを削除するために呼び出すことができるAPI操作の詳細については、「DeleteMultipleObjects」をご参照ください。