このトピックでは、単一のオブジェクト、指定された複数のオブジェクト、特定の名前プレフィックスを持つオブジェクト、またはディレクトリとその中のすべてのオブジェクトを削除する方法について説明します。
警告 削除操作を実行する際は、十分にご注意ください。削除されたオブジェクトは回復できません。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報の設定方法の詳細については、「アクセス認証情報の設定」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスが作成されます。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「クライアントの設定 (Go SDK V1)」をご参照ください。
オブジェクトを削除するには、oss:DeleteObject 権限が必要です。詳細については、「RAM ユーザーへのカスタムポリシーのアタッチ」をご参照ください。
単一ファイルの削除
次のコードは、examplebucket バケットから exampleobject.txt オブジェクトを削除する方法を示しています。
package main
import (
"log"
"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 {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// OSSClient インスタンスを作成します。
// yourEndpoint を、ご利用のバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを使用してください。
// yourRegion を、ご利用のバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、実際のリージョンを使用してください。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// バケット名を指定します (例: examplebucket)。
bucketName := "examplebucket"
// objectName に、削除するファイルの完全なパスを設定します。ファイル拡張子を含みますが、バケット名は含みません。例: exampledir/exampleobject.txt。
// フォルダを削除するには、objectName にフォルダ名を設定します。フォルダが空でない場合は、フォルダ自体を削除する前に、フォルダ内のすべてのオブジェクトを削除する必要があります。
objectName := "exampledir/exampleobject.txt"
// バケットインスタンスを取得します。
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket '%s': %v", bucketName, err)
}
// 単一のファイルを削除します。
err = bucket.DeleteObject(objectName)
if err != nil {
log.Fatalf("Failed to delete object '%s': %v", objectName, err)
}
log.Printf("Successfully deleted object: %s\n", objectName)
}
複数ファイルの削除
1 回の操作で最大 1,000 個のファイルを削除できます。次のいずれかの方法でファイルを削除できます。
OSS は、ライフサイクルルールを使用したファイルの自動削除もサポートしています。詳細については、「最終更新時間に基づくライフサイクルルール」をご参照ください。
名前による複数ファイルの削除
次のコードは、名前で指定された複数のファイルを削除する方法を示しています。
package main
import (
"log"
"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 {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// OSSClient インスタンスを作成します。
// yourEndpoint を、ご利用のバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを使用してください。
// yourRegion を、ご利用のバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、実際のリージョンを使用してください。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// バケット名を指定します (例: examplebucket)。
bucketName := "examplebucket"
// バケットインスタンスを取得します。
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket '%s': %v", bucketName, err)
}
// 複数のファイルを削除し、結果を返します。
objectsToDelete := []string{"my-object-1", "my-object-2"}
delRes, err := bucket.DeleteObjects(objectsToDelete)
if err != nil {
log.Fatalf("Failed to delete objects: %v", err)
}
log.Printf("Deleted Objects: %v\n", delRes.DeletedObjects)
// 結果を返さずに複数のファイルを削除します。
objectsToDeleteQuiet := []string{"my-object-3", "my-object-4"}
_, err = bucket.DeleteObjects(objectsToDeleteQuiet, oss.DeleteObjectsQuiet(true))
if err != nil {
log.Fatalf("Failed to delete objects (quiet): %v", err)
}
log.Println("Objects deleted quietly")
}
プレフィックスまたはフォルダによる複数ファイルの削除
次のコードは、特定のプレフィックスを持つ複数のファイルを削除する方法、または指定されたフォルダとそれに含まれるすべてのファイルを削除する方法を示しています。
警告 次のサンプルコードの prefix パラメーターの値が空の文字列または NULL の場合、バケット内のすべてのオブジェクトが削除されます。このパラメーターを使用する際は、十分にご注意ください。
package main
import (
"log"
"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 {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// OSSClient インスタンスを作成します。
// yourEndpoint を、ご利用のバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを使用してください。
// yourRegion を、ご利用のバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、実際のリージョンを使用してください。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// バケット名を指定します (例: examplebucket)。
bucket, err := client.Bucket("examplebucket")
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// 指定されたプレフィックスを持つすべてのファイルをリストアップして削除します。
marker := oss.Marker("")
// プレフィックス "src" を持つすべてのファイルを削除するには、プレフィックスを "src" に設定します。これにより、"src" プレフィックスを持つフォルダ以外のすべてのファイル、"src" フォルダ、およびその中のすべてのファイルが削除されます。
prefix := oss.Prefix("src")
// "src" フォルダとその中のすべてのファイルのみを削除するには、プレフィックスを "src/" に設定します。
// prefix := oss.Prefix("src/")
var totalDeleted int
for {
lor, err := bucket.ListObjects(marker, prefix)
if err != nil {
log.Fatalf("Failed to list objects: %v", err)
}
objects := make([]string, len(lor.Objects))
for i, object := range lor.Objects {
objects[i] = object.Key
}
// オブジェクトを削除します。
delRes, err := bucket.DeleteObjects(objects, oss.DeleteObjectsQuiet(true))
if err != nil {
log.Fatalf("Failed to delete objects: %v", err)
}
if len(delRes.DeletedObjects) > 0 {
log.Fatalf("Some objects failed to delete: %v", delRes.DeletedObjects)
}
totalDeleted += len(objects)
// マーカーを更新します。
marker = oss.Marker(lor.NextMarker)
if !lor.IsTruncated {
break
}
}
log.Printf("Success, total deleted object count: %d\n", totalDeleted)
}