【阿里云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
		}
	}
相关推荐
Johny_Zhao13 小时前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
NineData18 小时前
数据库迁移总踩坑?用 NineData 迁移评估,提前识别所有兼容性风险
数据库·程序员·云计算
花酒锄作田6 天前
Gin 框架中的规范响应格式设计与实现
golang·gin
SaaS_Product6 天前
从实用性与体验角度出发,OneDrive有什么替代品
云计算·saas·onedrive
小扎仙森6 天前
关于阿里云实时语音翻译-Gummy推送WebSocket
websocket·阿里云·云计算
晚秋大魔王6 天前
ubutnu 服务器配置openclaw 使用阿里云百炼模型
运维·服务器·阿里云
qwfys2006 天前
How to install golang 1.26.0 to Ubuntu 24.04
ubuntu·golang·install
codeejun6 天前
每日一Go-25、Go语言进阶:深入并发模式1
开发语言·后端·golang
石牌桥网管6 天前
Go 泛型(Generics)
服务器·开发语言·golang
Shacoray6 天前
OpenClaw 接入阿里云百炼 Coding Plan 指南
阿里云·ai·云计算·qwen3·openclaw·coding plan