主题切换
文件管理
在OSCA-OSS中,用户可以通过一系列的接口管理桶(Bucket)中的文件(Object),比如ListObjects,DeleteObject,CopyObject,HeadObject等。
列出桶中的文件
通过ListObjects方法获取用户桶下面的对象。可以设置的参数列表如下:
参数 | 作用 |
---|---|
Prefix | 限定返回的object key必须以prefix作为前缀 |
Delimiter | 是一个用于对Object名字进行分组的字符。所有名字包含指定的前缀且第一次出现delimiter字符之间的object作为一组元素——CommonPrefixes |
Marker | 字典序的起始标记,只列出该标记之后的部分 |
MaxKeys | 限定返回的数量,返回的结果小于或等于该值(默认值为100) |
示例代码如下:
go
resp,err := s3Client.ListObjects(&s3.ListObjectsInput{Bucket:aws.String(SrcBucket),
Prefix:aws.String(prefix),Delimiter:aws.String(delimiter),Marker:aws.String(marker)})
if err != nil {
fmt.Println(err.Error())
} else {
for _,value := range resp.Contents {
fmt.Println(*value.Key)
}
}
判断文件是否存在
通过HeadObject方法来判断对象是否存在。示例代码如下:
go
func doObjectExist(s3Client *s3.S3,bucketName,objectName string)(bool){
resp,err := s3Client.HeadObject(&s3.HeadObjectInput{Bucket:aws.String(bucketName),
Key:aws.String(objectName)})
if err != nil {
fmt.Println("headObject " + err.Error())
return false;
} else {
fmt.Println(*resp.ETag)
return true
}
}
删除单个文件
通过DeleteObject方法实现单个文件删除功能。示例代码如下:
go
func deleteObject(s3Client *s3.S3,bucketName,objectName string) {
resp,err := s3Client.DeleteObject(&s3.DeleteObjectInput{Bucket:aws.String(bucketName),Key:aws.String(objectName)})
if err != nil {
fmt.Println(err.Error())
return
} else {
fmt.Println(resp)
}
}
删除多个文件
go
func deleteObjects(s3Client *s3.S3,bucketName string){
var objs []*s3.ObjectIdentifier
objs = append(objs,&s3.ObjectIdentifier{Key:aws.String("main")})
objs = append(objs,&s3.ObjectIdentifier{Key:aws.String("test")})
ds := &s3.Delete{Quiet:aws.Bool(false),Objects:objs}
resp,err := s3Client.DeleteObjects(&s3.DeleteObjectsInput{Bucket:aws.String(bucketName),Delete:ds,})
if err != nil {
fmt.Println("DeleteObjects : " + err.Error())
return
} else {
for _,deleted := range resp.Deleted{
fmt.Println("deleted : " + *deleted.Key)
}
for _,err := range resp.Errors {
fmt.Println("error : " + *err.Key)
}
}
拷贝文件
通过CopyObject方法实现对象复制功能,OSCA-OSS支持桶内copy以及相同用户的跨桶copy。示例代码如下:
go
func copyObject(s3Client *s3.S3,srcBucket,srcObject,destBucket,destObject string){
copyObjectInput := &s3.CopyObjectInput{
Bucket:aws.String(destBucket),
Key:aws.String(destObject),
CopySource:aws.String("/" + srcBucket + "/" + srcObject),//这里的格式必须要一致,不然OSCA-OSS会报错,其他的格式后期兼容
}
_,err := s3Client.CopyObject(copyObjectInput)
if err != nil {
fmt.Println(err.Error())
return
}
}
获取文件的文件元信息
通过HeadObject方法获取文件的元数据,在resp中读取想要的信息即可。示例代码如下:
go
func getObjectMeta(s3Client *s3.S3,bucketName,objectName string){
resp,err := s3Client.HeadObject(&s3.HeadObjectInput{Bucket:aws.String(bucketName),
Key:aws.String(objectName)})
if err != nil {
fmt.Println("headObject " + err.Error())
} else {
fmt.Println(*resp.ETag , *resp.ContentLength)
}
}
生成私有对象可下载的URL链接
go
func getObjectDonwloadUrl(s3Client *s3.S3, bucketName, objectName string) {
req, _ := s3Client.GetObjectRequest(&s3.GetObjectInput{
Bucket: aws.String(bucketName),
Key: aws.String(objectName),
})
urlStr, err := req.Presign(15 * time.Minute) //过期时间
if err != nil {
fmt.Println(err)
}
fmt.Println("The URL is", urlStr)
}
获取对象标签
go
func PutObjectTagging(s3Client *s3.S3, bucketName, objectName string) {
params := &s3.PutObjectTaggingInput{
Bucket: aws.String(BucketName), // bucket名称
Key: aws.String(keyName), // object key
Tagging: &s3.Tagging{
TagSet: []*s3.Tag{
{
Key: aws.String("aa"), // 键1
Value: aws.String("bb"), // 值1
},
{
Key: aws.String("cc"), // 键2
Value: aws.String("dd"), // 值2
},
},
},
}
resp, err := svc.PutObjectTagging(params)
if err != nil {
fmt.Printf("err: %v\n", err)
}
fmt.Printf("resp: %v\n", resp)
}
获取对象标签
go
func GetObjectTagging(s3Client *s3.S3, bucketName, objectName string) {
params := &s3.GetObjectTaggingInput{
Bucket: aws.String(BucketName), // bucket名称
Key: aws.String(keyName), // object key
}
resp, err := svc.GetObjectTagging(params)
if err != nil {
fmt.Printf("err: %v\n", err)
}
fmt.Printf("resp: %v\n", resp)
}
删除对象标签
go
func DeleteObjectTagging(s3Client *s3.S3, bucketName, objectName string) {
params := &s3.DeleteObjectTaggingInput{
Bucket: aws.String(BucketName), // bucket名称
Key: aws.String(keyName), // object key
}
resp, err := svc.DeleteObjectTagging(params)
if err != nil {
fmt.Println(err)
}
fmt.Printf("resp: %v\n", resp)
}