conf.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. package oss
  2. import (
  3. "bytes"
  4. "fmt"
  5. "log"
  6. "os"
  7. "time"
  8. )
  9. const (
  10. LogOff = iota
  11. Error
  12. Warn
  13. Info
  14. Debug
  15. )
  16. var LogTag = []string{"[error]", "[warn]", "[info]", "[debug]"}
  17. // HTTPTimeout defines HTTP timeout.
  18. type HTTPTimeout struct {
  19. ConnectTimeout time.Duration
  20. ReadWriteTimeout time.Duration
  21. HeaderTimeout time.Duration
  22. LongTimeout time.Duration
  23. IdleConnTimeout time.Duration
  24. }
  25. type HTTPMaxConns struct {
  26. MaxIdleConns int
  27. MaxIdleConnsPerHost int
  28. }
  29. // Config defines oss configuration
  30. type Config struct {
  31. Endpoint string // OSS endpoint
  32. AccessKeyID string // AccessId
  33. AccessKeySecret string // AccessKey
  34. RetryTimes uint // Retry count by default it's 5.
  35. UserAgent string // SDK name/version/system information
  36. IsDebug bool // Enable debug mode. Default is false.
  37. Timeout uint // Timeout in seconds. By default it's 60.
  38. SecurityToken string // STS Token
  39. IsCname bool // If cname is in the endpoint.
  40. HTTPTimeout HTTPTimeout // HTTP timeout
  41. HTTPMaxConns HTTPMaxConns // Http max connections
  42. IsUseProxy bool // Flag of using proxy.
  43. ProxyHost string // Flag of using proxy host.
  44. IsAuthProxy bool // Flag of needing authentication.
  45. ProxyUser string // Proxy user
  46. ProxyPassword string // Proxy password
  47. IsEnableMD5 bool // Flag of enabling MD5 for upload.
  48. MD5Threshold int64 // Memory footprint threshold for each MD5 computation (16MB is the default), in byte. When the data is more than that, temp file is used.
  49. IsEnableCRC bool // Flag of enabling CRC for upload.
  50. LogLevel int // Log level
  51. Logger *log.Logger // For write log
  52. UploadLimitSpeed int // Upload limit speed:KB/s, 0 is unlimited
  53. UploadLimiter *OssLimiter // Bandwidth limit reader for upload
  54. }
  55. // LimitUploadSpeed, uploadSpeed:KB/s, 0 is unlimited,default is 0
  56. func (config *Config) LimitUploadSpeed(uploadSpeed int) error {
  57. if uploadSpeed < 0 {
  58. return fmt.Errorf("erro,speed is less than 0")
  59. } else if uploadSpeed == 0 {
  60. config.UploadLimitSpeed = 0
  61. config.UploadLimiter = nil
  62. return nil
  63. }
  64. var err error
  65. config.UploadLimiter, err = GetOssLimiter(uploadSpeed)
  66. if err == nil {
  67. config.UploadLimitSpeed = uploadSpeed
  68. }
  69. return err
  70. }
  71. // WriteLog
  72. func (config *Config) WriteLog(LogLevel int, format string, a ...interface{}) {
  73. if config.LogLevel < LogLevel || config.Logger == nil {
  74. return
  75. }
  76. var logBuffer bytes.Buffer
  77. logBuffer.WriteString(LogTag[LogLevel-1])
  78. logBuffer.WriteString(fmt.Sprintf(format, a...))
  79. config.Logger.Printf("%s", logBuffer.String())
  80. }
  81. // getDefaultOssConfig gets the default configuration.
  82. func getDefaultOssConfig() *Config {
  83. config := Config{}
  84. config.Endpoint = ""
  85. config.AccessKeyID = ""
  86. config.AccessKeySecret = ""
  87. config.RetryTimes = 5
  88. config.IsDebug = false
  89. config.UserAgent = userAgent()
  90. config.Timeout = 60 // Seconds
  91. config.SecurityToken = ""
  92. config.IsCname = false
  93. config.HTTPTimeout.ConnectTimeout = time.Second * 30 // 30s
  94. config.HTTPTimeout.ReadWriteTimeout = time.Second * 60 // 60s
  95. config.HTTPTimeout.HeaderTimeout = time.Second * 60 // 60s
  96. config.HTTPTimeout.LongTimeout = time.Second * 300 // 300s
  97. config.HTTPTimeout.IdleConnTimeout = time.Second * 50 // 50s
  98. config.HTTPMaxConns.MaxIdleConns = 100
  99. config.HTTPMaxConns.MaxIdleConnsPerHost = 100
  100. config.IsUseProxy = false
  101. config.ProxyHost = ""
  102. config.IsAuthProxy = false
  103. config.ProxyUser = ""
  104. config.ProxyPassword = ""
  105. config.MD5Threshold = 16 * 1024 * 1024 // 16MB
  106. config.IsEnableMD5 = false
  107. config.IsEnableCRC = true
  108. config.LogLevel = LogOff
  109. config.Logger = log.New(os.Stdout, "", log.LstdFlags)
  110. return &config
  111. }