一度に1つ以上のオブジェクトを削除したり、指定されたプレフィックスを名前に含むオブジェクトを削除したり、指定されたディレクトリとそのディレクトリ内のすべてのオブジェクトを削除したりできます。
削除したオブジェクトを元に戻すことはできません。 オブジェクトを削除するときは注意してください。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba Cloudサービスを使用してOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSでサポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSTS (Security Token Service) を使用してOSSClientインスタンスを作成する場合は、「初期化」をご参照ください。
オブジェクトを削除するには、
oss:DeleteObject
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。
単一のオブジェクトの削除
次のサンプルコードは、examplebucketバケットからexampleobject.txtオブジェクトを削除する方法の例を示しています。
パッケージメイン
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)
}
// バケットの名前を指定します。 例: examplebucket.
bucketName := "examplebucket"
// objectNameを削除するオブジェクトのフルパスに設定します。 フルパスにオブジェクト名の拡張子を含める必要がありますが、バケット名を含めることはできません。 例: exampledir/exampleobject.txt。
// ディレクトリを削除する場合は、ディレクトリ名にobjectNameを設定します。 ディレクトリにオブジェクトが含まれている場合は、ディレクトリを削除する前に、ディレクトリからすべてのオブジェクトを削除する必要があります。
objectName := "exampledir/exampleobject.txt"
bucket, err := client.Bucket(bucketName)
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Delete the object.
err = bucket.DeleteObject(objectName)
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
複数のオブジェクトの削除
一度に最大1,000個のオブジェクトを削除できます。 複数の指定されたオブジェクト、指定されたプレフィックスを含む名前のオブジェクト、または指定されたディレクトリとディレクトリ内のすべてのオブジェクトを削除できます。
ライフサイクルルールを設定して、オブジェクトを自動的に削除することもできます。 詳細については、「最終変更時刻に基づくライフサイクルルール」をご参照ください。
複数の指定オブジェクトの削除
次のサンプルコードは、指定した複数のオブジェクトを削除する方法の例を示します。
パッケージメイン
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)
}
// バケットの名前を指定します。 例: examplebucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 削除するオブジェクトのフルパスを指定します。 完全なパスにバケット名を含めないでください。
delRes, err := bucket.DeleteObjects([]string{"my-object-1", "my-object-2"})
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("Deleted Objects:", delRes.DeletedObjects)
// oss.DeleteObjectsQuietをtrueに設定します。 値trueは、削除結果が返されないことを示します。
_, err = bucket.DeleteObjects([]string{"my-object-3", "my-object-4"},
oss.DeleteObjectsQuiet(true))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
指定されたオブジェクト名プレフィックスまたは指定されたディレクトリ内の複数のオブジェクトを削除する
次のサンプルコードでは、指定した名前プレフィックスを持つ複数のオブジェクトを削除する方法と、指定したディレクトリとそのディレクトリ内のすべてのオブジェクトを削除する方法の例を示します。
プレフィックスが指定されていないか、次のコードでNULLに設定されている場合、バケット内のすべてのオブジェクトが削除されます。 削除操作でプレフィックスを指定するときは注意してください。
パッケージメイン
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)
}
// バケットの名前を指定します。 例: examplebucket.
bucket, err := client.Bucket("examplebucket")
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 指定されたプレフィックスを含む名前のすべてのオブジェクトを一覧表示し、オブジェクトを削除します。
marker := oss.Marker("")
// 削除するオブジェクトの名前のプレフィックスを指定します。 名前にsrcプレフィックスが含まれるすべてのオブジェクトを削除する場合は、プレフィックスをsrcに設定します。 プレフィックスをsrcに設定すると、srcプレフィックス、srcディレクトリ、およびsrcディレクトリ内のすべてのオブジェクトを含む名前のディレクトリ以外のすべてのオブジェクトが削除されます。
プレフィックス:= oss. prefix ("src")
// srcディレクトリとディレクトリ内のすべてのオブジェクトのみを削除する場合は、プレフィックスをsrc /に設定します。
// prefix := oss.Prefix("src/")
count := 0
for {
lor, err := bucket.ListObjects(marker, prefix)
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
objects := []string{}
_, object := range lor.Objects {
objects = append(objects, object.Key)
}
// oss.DeleteObjectsQuietをtrueに設定します。 値trueは、削除結果が返されないことを示します。
delRes, err := bucket.DeleteObjects(objects, oss.DeleteObjectsQuiet(true))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
len(delRes.DeletedObjects) > 0 {
fmt.Println("these objects deleted failure,", delRes.DeletedObjects)
os.Exit(-1)
}
count += len (オブジェクト)
prefix = oss.Prefix(lor.Prefix)
marker = oss.Marker(lor.NextMarker)
if! lor.IsTruncated {
break
}
}
fmt.Printf("success,total delete object count:% d\n", count)
}
参考資料
オブジェクトの削除に使用される完全なサンプルコードの詳細については、『GitHub』をご参照ください。
オブジェクトを削除するために呼び出すことができるAPI操作の詳細については、「DeleteObject」をご参照ください。
複数のオブジェクトを削除するために呼び出すことができるAPI操作の詳細については、「DeleteMultipleObjects」をご参照ください。