u_oss.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package util
  2. import (
  3. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  4. "os"
  5. "strconv"
  6. )
  7. // LimitUpload 限速上传
  8. // limitBit 默认单位为bit/s。比如 41943040 为 5 MB/s。
  9. func LimitUpload(bucket *oss.Bucket, limitBit int64, ossObjectKey string, localFilePath string) error {
  10. fd, err := os.Open(localFilePath)
  11. if err != nil {
  12. return err
  13. }
  14. defer fd.Close()
  15. if err = bucket.PutObject(ossObjectKey, fd, oss.TrafficLimitHeader(limitBit)); err != nil {
  16. return err
  17. }
  18. return nil
  19. }
  20. // LimitDownload 限速下载
  21. // limitBit 默认单位为bit/s。比如 41943040 为 5 MB/s。
  22. func LimitDownload(bucket *oss.Bucket, limitBit int64, ossObjectKey string, localFilePath string) error {
  23. if err := CreateParentDir(localFilePath); err != nil {
  24. return err
  25. }
  26. if err := bucket.GetObjectToFile(ossObjectKey, localFilePath, oss.TrafficLimitHeader(limitBit)); err != nil {
  27. return err
  28. }
  29. return nil
  30. }
  31. func GetOSSFileSize(bucket *oss.Bucket, objectName string) (int, error) {
  32. // 获取文件的元信息
  33. attrs, err := bucket.GetObjectDetailedMeta(objectName)
  34. if err != nil {
  35. return 0, err
  36. }
  37. // 从元信息中获取文件大小
  38. size, err := strconv.Atoi(attrs.Get("Content-Length"))
  39. if err != nil {
  40. return 0, err
  41. }
  42. return size, nil
  43. }