【阿里云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
		}
	}
相关推荐
TG:@yunlaoda360 云老大41 分钟前
如何评估华为云国际站代理商跨境合规要求?
大数据·数据库·华为云·云计算
@HNUSTer43 分钟前
基于 GEE 的 Landsat 9 数据实现 11 种植被指数批量计算与导出
云计算·数据集·遥感大数据·gee·云平台·植被指数·landsat 9
TG:@yunlaoda360 云老大1 小时前
如何了解华为云国际站代理商的GACS主要有什么作用呢?
大数据·华为云·云计算
小徐Chao努力1 小时前
Go语言核心知识点底层原理教程【变量、类型与常量】
开发语言·后端·golang
锥锋骚年1 小时前
go语言异常处理方案
开发语言·后端·golang
咕噜企业分发小米1 小时前
阿里云基因测序数据分析平台有哪些成功案例?
阿里云·数据分析·云计算
咕噜企业分发小米2 小时前
阿里云与华为云在基因测序数据存储上哪个更好?
服务器·阿里云·腾讯云
Zhou-XueLin2 小时前
虚拟环境(云主机)下使用多显示器环境连接RDP远程桌面提示协议错误0x112f需禁用WDDM驱动
windows·云计算
wanhengidc2 小时前
巨 椰 云手机 性能稳定
运维·服务器·arm开发·智能手机·云计算
翼龙云_cloud2 小时前
阿里云渠道商:阿里云GPU怎么搭建部署个人作品集博客?
运维·服务器·阿里云·云计算