|
@@ -26,58 +26,53 @@ func TestCompareSize(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
func TestDeleteDir(t *testing.T) {
|
|
|
+ // 配置 OSS 客户端
|
|
|
+ endpoint := "http://pji-bucket1.oss.icvdc.com" // 替换为实际的 OSS Endpoint
|
|
|
+ accessKeyID := "n8glvFGS25MrLY7j" // 替换为实际的 AccessKeyID
|
|
|
+ accessKeySecret := "xZ2Fozoarpfw0z28FUhtg8cu0yDc5d" // 替换为实际的 AccessKeySecret
|
|
|
+ bucketName := "xinqi" // 替换为实际的 Bucket 名称
|
|
|
+ prefix := "your-prefix/" // 替换为实际的前缀
|
|
|
|
|
|
- // 配置阿里云 Access Key ID、Access Key Secret 和 Endpoint
|
|
|
- accessKeyID := "yourAccessKeyID"
|
|
|
- accessKeySecret := "yourAccessKeySecret"
|
|
|
- endpoint := "http://oss-cn-hangzhou.aliyuncs.com" // 根据你的 region 修改
|
|
|
- bucketName := "yourBucketName"
|
|
|
- prefix := "yourPrefix/"
|
|
|
-
|
|
|
- // 创建客户端
|
|
|
+ // 创建 OSS 客户端
|
|
|
client, err := oss.New(endpoint, accessKeyID, accessKeySecret)
|
|
|
if err != nil {
|
|
|
log.Fatalf("Error creating OSS client: %v", err)
|
|
|
}
|
|
|
|
|
|
- // 获取 bucket
|
|
|
+ // 获取 Bucket
|
|
|
bucket, err := client.Bucket(bucketName)
|
|
|
if err != nil {
|
|
|
log.Fatalf("Error getting bucket: %v", err)
|
|
|
}
|
|
|
|
|
|
- // 列出符合前缀的对象
|
|
|
- opts := oss.ListObjectsOptions{
|
|
|
- Prefix: prefix,
|
|
|
- Delimiter: "",
|
|
|
- MaxKeys: 1000, // 设置每次返回的最大对象数,可以根据需要调整
|
|
|
- }
|
|
|
-
|
|
|
+ // 列出指定前缀的所有对象
|
|
|
+ marker := ""
|
|
|
for {
|
|
|
- lor, err := bucket.ListObjects(opts)
|
|
|
+ lsRes, err := bucket.ListObjects(oss.Prefix(prefix), oss.Marker(marker))
|
|
|
if err != nil {
|
|
|
log.Fatalf("Error listing objects: %v", err)
|
|
|
}
|
|
|
|
|
|
- // 遍历并删除对象
|
|
|
- for _, obj := range lor.Objects {
|
|
|
- err = bucket.DeleteObject(obj.Key)
|
|
|
+ // 删除列出的对象
|
|
|
+ var objectsToDelete []string
|
|
|
+ for _, object := range lsRes.Objects {
|
|
|
+ objectsToDelete = append(objectsToDelete, object.Key)
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(objectsToDelete) > 0 {
|
|
|
+ _, err = bucket.DeleteObjects(objectsToDelete, oss.DeleteObjectsQuiet(true))
|
|
|
if err != nil {
|
|
|
- log.Printf("Error deleting object %s: %v", obj.Key, err)
|
|
|
- // 你可以选择如何处理删除失败的情况,例如记录日志或重新尝试
|
|
|
- } else {
|
|
|
- fmt.Printf("Deleted object: %s\n", obj.Key)
|
|
|
+ log.Fatalf("Error deleting objects: %v", err)
|
|
|
}
|
|
|
+ fmt.Printf("Deleted %d objects: %v\n", len(objectsToDelete), objectsToDelete)
|
|
|
}
|
|
|
|
|
|
// 如果没有更多对象,退出循环
|
|
|
- if !lor.IsTruncated {
|
|
|
+ if !lsRes.IsTruncated {
|
|
|
break
|
|
|
}
|
|
|
-
|
|
|
- // 更新 ListObjectsOptions 以获取下一页对象
|
|
|
- opts.Marker = lor.NextMarker
|
|
|
+ marker = lsRes.NextMarker
|
|
|
}
|
|
|
|
|
|
- fmt.Println("All objects with the specified prefix have been deleted.")
|
|
|
+ fmt.Println("Finished deleting all objects with prefix.")
|
|
|
}
|