【阿里云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
		}
	}
相关推荐
容器魔方36 分钟前
持续领跑,华为云连续5年蝉联中国容器软件市场份额第一
云原生·容器·云计算
m0_694845573 小时前
服务器怎么跑Python项目?
linux·运维·服务器·python·云计算
亚洲第一中锋_哈达迪3 小时前
详解缓存淘汰策略:LFU
后端·缓存·golang
拓端研究室4 小时前
专题:2025云计算与AI技术研究趋势报告|附200+份报告PDF、原数据表汇总下载
人工智能·pdf·云计算
nextera-void5 小时前
深入浅出 Golang:一次精神之旅
开发语言·golang·go
果子⌂6 小时前
Docker高级管理
开发语言·docker·云计算·php
胡萝卜的兔13 小时前
golang -gorm 增删改查操作,事务操作
开发语言·后端·golang
Go Dgg20 小时前
【Go + Gin 实现「双 Token」管理员登录】
开发语言·golang·gin
nbsaas-boot21 小时前
Go语言生态成熟度分析:为何Go还无法像Java那样实现注解式框架?
java·开发语言·golang
苹果企业签名分发1 天前
腾讯云分为几个区域
云计算·腾讯云