初次尝试使用Go获取S3存储文件大小,所以写一下记录一下获取S3根据keyname获取对应文件的大小,方法简单粗暴,看了一下似乎没有直接的办法就自己简单写一下。
获取S3连接
func GetS3Service() (*session.Session, S3Config) {
config := S3Config{
AccessKey: os.Getenv(""),
SecretKey: os.Getenv(""),
EndPoint: os.Getenv(""),
Bucket: os.Getenv(""),
Region: os.Getenv(""),
}
sess, _ := session.NewSession(&aws.Config{
Credentials: credentials.NewStaticCredentials(config.AccessKey, config.SecretKey, ""),
Endpoint: aws.String(config.EndPoint),
Region: aws.String("us-ease-1"),
DisableSSL: aws.Bool(true),
S3ForcePathStyle: aws.Bool(false), //virtual-host style方式,不要修改
})
return sess, config
}
获取文件大小
//
func GetFileSizeFromS3(keyName string) (string, error) {
initService, S3config := GetS3Service()
svc := s3.New(initService)
headObj := s3.HeadObjectInput{
Bucket: aws.String(S3config.Bucket),
Key: aws.String(keyName),
}
result, err := svc.HeadObject(&headObj)
byteSize := *result.ContentLength //大小为为B,需要转化为对应单位
size := GetSize(byteSize)
return size, err
}
func GetSize(fileSize int64) string {
size := ""
switch {
case fileSize < 1024:
size = fmt.Sprintf("%.2fB", float64(fileSize)/float64(1))
case fileSize < (1024 * 1024):
size = fmt.Sprintf("%.2fKB", float64(fileSize)/float64(1024))
case fileSize < (1024 * 1024 * 1024):
size = fmt.Sprintf("%.2fMB", float64(fileSize)/float64(1024*1024))
case fileSize < (1024 * 1024 * 1024 * 1024):
size = fmt.Sprintf("%.2fGB", float64(fileSize)/float64(1024*1024*1024))
default:
size = ">=1T"
}
return size
}