【阿里云OSS】golang实现 添加文件到OSS | OSS批量删除bucket下指定的文件夹以及内部的文件

一、上传文件到阿里云OSS

1、前提

我们需要将文件上传到本地的服务器内

2、OSS代码实现

go 复制代码
package common

import (
	"fmt"
	"gitee.com/ctra/ctra-go-common.git/constant"
	"github.com/aliyun/alibaba-cloud-sdk-go/services/sts"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
	"os"
)

func UploadAliyunOSS(objectName string, localFileName string) error {
	// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
	endpoint := constant.ALIYUN_ENDPOINT_OUTSIDE
	// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
	accessKeyId := constant.ALIYUN_ACCESSKEY_ID
	accessKeySecret := constant.ALIYUN_ACCESSKEY_SECRET
	// yourBucketName填写存储空间名称。
	bucketName := constant.ALIYUN_BUCKET_NAME
	// yourObjectName填写Object完整路径,完整路径不包含Bucket名称。
	//objectName := "yourObjectName"
	// yourLocalFileName填写本地文件的完整路径。
	//localFileName := "yourLocalFileName"
	// 创建OSSClient实例。
	client, err := oss.New(endpoint, accessKeyId, accessKeySecret)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
		return err
	}
	// 获取存储空间。
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
		return err
	}
	// 上传文件。
	err = bucket.PutObjectFromFile(objectName, localFileName)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
		return err
	}
	return nil
}

	fmt.Printf("success,total delete object count:%d\n", count)

	return nil
}

二、清空阿里云OSS指定bucket下

1、代码实现

go 复制代码
func DelAliyunOSSBucketFolder(folderName string) error {
	// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
	endpoint := constant.ALIYUN_ENDPOINT_OUTSIDE
	// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
	accessKeyId := constant.ALIYUN_ACCESSKEY_ID
	accessKeySecret := constant.ALIYUN_ACCESSKEY_SECRET
	// yourBucketName填写存储空间名称。
	bucketName := constant.ALIYUN_BUCKET_NAME
	// yourObjectName填写Object完整路径,完整路径不包含Bucket名称。
	//objectName := "yourObjectName"
	// yourLocalFileName填写本地文件的完整路径。
	//localFileName := "yourLocalFileName"
	// 创建OSSClient实例。
	fmt.Println("-------------创建OSSClient实例")

	client, err := oss.New(endpoint, accessKeyId, accessKeySecret)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
		return err
	}
	// 获取 Bucket 实例
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		fmt.Println("\"Error creating bucket instance:", err)
		os.Exit(-1)
		return err
	}

	// 删除指定文件夹
	//err = bucket.DeleteObject(folderName)
	//if err != nil {
	//	fmt.Println("Error deleting folder:", err)
	//	os.Exit(-1)
	//	return err
	//}
	marker := oss.Marker("")
	// 填写待删除目录的完整路径,完整路径中不包含Bucket名称。
	prefix := oss.Prefix(folderName)

	count := 0
	for {
		lor, err := bucket.ListObjects(marker, prefix)
		if err != nil {
			fmt.Println("Error:", err)
			os.Exit(-1)
		}

		if len(lor.Objects) == 0 {
			break
		}

		objects := []string{}
		for _, object := range lor.Objects {
			objects = append(objects, object.Key)
		}
		// 删除目录及目录下的所有文件。
		// 将oss.DeleteObjectsQuiet设置为true,表示不返回删除结果。
		delRes, err := bucket.DeleteObjects(objects, oss.DeleteObjectsQuiet(true))
		if err != nil {
			fmt.Println("Error:", err)
			os.Exit(-1)
		}

		if len(delRes.DeletedObjects) > 0 {
			fmt.Println("these objects deleted failure,", delRes.DeletedObjects)
			os.Exit(-1)
		}

		count += len(objects)

		prefix = oss.Prefix(lor.Prefix)
		marker = oss.Marker(lor.NextMarker)
		if !lor.IsTruncated {
			break
		}
	}
相关推荐
Vfw3VsDKo10 小时前
Maui 实践:Go 接口以类型之名,给 runtime 传递方法参数
开发语言·后端·golang
不会写DN15 小时前
构建一个抗揍的 Go TCP 聊天服务:异常兜底与防御性编程实践
tcp/ip·golang·php
不会写DN18 小时前
Go中如何跨语言实现传输? - GRPC
开发语言·qt·golang
@atweiwei20 小时前
Go语言并发编程面试题精讲(下)
面试·golang·并发·channel
chenqianghqu21 小时前
golang CGO在跨平台交叉编译x86到arm64
golang
@atweiwei21 小时前
Go语言并发编程面试题精讲(上)
java·开发语言·面试·golang·channel
不会写DN21 小时前
使用 sync.Once 解决 Go 并发场景下的重复下线广播问题
开发语言·网络·golang
Echo-J21 小时前
WinDbg 双机调试(调试机为Windows11系统,被调试机为Windows7系统)
安全·网络安全·云计算·系统安全
Gse0a362g1 天前
Go - Zerolog使用入门
开发语言·后端·golang
翼龙云_cloud1 天前
亚马逊云代理商:如何在 AWS Lightsail 上一键部署 OpenClaw 私有化 AI 助手?
人工智能·云计算·aws·openclaw