【阿里云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
		}
	}
相关推荐
Wang's Blog8 小时前
Go-Zero 项目开发43:基于 Filebeat 收集各个服务的日志信息
开发语言·golang·go-zero·filebeat
AKAMAI8 小时前
Linode接口及默认防火墙现已全面开放使用
人工智能·云计算
FellAveal16 小时前
【Go语言入门学习笔记】Part19.速率控制、原子计数器、互斥锁(Mutex)、状态协程
笔记·学习·golang
阿里云云原生16 小时前
一周上线!信永中和基于阿里云 AgentTeams + AI 网关打造多智能体 AI 平台
阿里云·云原生·ai网关·agentteams
发量惊人的中年网工19 小时前
工业视觉云边 AI 推理总是卡顿?SD-WAN 打通边缘算力互联
网络·人工智能·网络安全·云计算
Loveucafe20 小时前
日咖夜酒咖啡厅在哪里
阿里云
JL151 天前
Java+Go 混合架构怎么搭?收官 50 道面试题 + 学习路线
java·架构·golang
故乡dee云1 天前
AWS 月度账单怎么看?费用明细、扣款时间和结算规则说明
云计算·aws
Wang's Blog1 天前
Go-Zero 项目开发45: Prometheus + Grafana 安装部署与服务监控实战
golang·grafana·prometheus