oss/config.go (175 lines of code) (raw):

package oss import ( "net/http" "os" "time" "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials" "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/retry" ) type HTTPClient interface { Do(*http.Request) (*http.Response, error) } type Config struct { // The region in which the bucket is located. Region *string // The domain names that other services can use to access OSS. Endpoint *string // RetryMaxAttempts specifies the maximum number attempts an API client will call // an operation that fails with a retryable error. RetryMaxAttempts *int // Retryer guides how HTTP requests should be retried in case of recoverable failures. Retryer retry.Retryer // The HTTP client to invoke API calls with. Defaults to client's default HTTP // implementation if nil. HttpClient HTTPClient // The credentials provider to use when signing requests. CredentialsProvider credentials.CredentialsProvider // Allows you to enable the client to use path-style addressing, i.e., https://oss-cn-hangzhou.aliyuncs.com/bucket/key. // By default, the oss client will use virtual hosted addressing i.e., https://bucket.oss-cn-hangzhou.aliyuncs.com/key. UsePathStyle *bool // If the endpoint is s CName, set this flag to true UseCName *bool // Connect timeout ConnectTimeout *time.Duration // read & write timeout ReadWriteTimeout *time.Duration // Skip server certificate verification InsecureSkipVerify *bool // Enable http redirect or not. Default is disable EnabledRedirect *bool // Flag of using proxy host. ProxyHost *string // Read the proxy setting from the environment variables. // HTTP_PROXY, HTTPS_PROXY and NO_PROXY (or the lowercase versions thereof). // HTTPS_PROXY takes precedence over HTTP_PROXY for https requests. ProxyFromEnvironment *bool // Upload bandwidth limit in kBytes/s for all request UploadBandwidthlimit *int64 // Download bandwidth limit in kBytes/s for all request DownloadBandwidthlimit *int64 // Authentication with OSS Signature Version SignatureVersion *SignatureVersionType // The level of the output log LogLevel *int // A interface for the SDK to log messages to. LogPrinter LogPrinter // DisableSSL forces the endpoint to be resolved as HTTP. DisableSSL *bool // Dual-stack endpoints are provided in some regions. // This allows an IPv4 client and an IPv6 client to access a bucket by using the same endpoint. // Set this to `true` to use a dual-stack endpoint for the requests. UseDualStackEndpoint *bool // OSS provides the transfer acceleration feature to accelerate date transfers of data // uploads and downloads across countries and regions. // Set this to `true` to use a accelerate endpoint for the requests. UseAccelerateEndpoint *bool // You can use an internal endpoint to communicate between Alibaba Cloud services located within the same // region over the internal network. You are not charged for the traffic generated over the internal network. // Set this to `true` to use a accelerate endpoint for the requests. UseInternalEndpoint *bool // Check data integrity of uploads via the crc64 by default. // This feature takes effect for PutObject, AppendObject, UploadPart, Uploader.UploadFrom and Uploader.UploadFile // Set this to `true` to disable this feature. DisableUploadCRC64Check *bool // Check data integrity of download via the crc64 by default. // This feature only takes effect for Downloader.DownloadFile, GetObjectToFile // Set this to `true` to disable this feature. DisableDownloadCRC64Check *bool // Additional signable headers. AdditionalHeaders []string // The optional user specific identifier appended to the User-Agent header. UserAgent *string // The cloud box id CloudBoxId *string // The cloud box id is automatically extracted from endpoint. EnableAutoDetectCloudBoxId *bool } func NewConfig() *Config { return &Config{} } func (c Config) Copy() Config { cp := c return cp } func LoadDefaultConfig() *Config { config := &Config{} // load from env str := os.Getenv("OSS_SDK_LOG_LEVEL") if str != "" { if level := ToLogLevel(str); level > LogOff { config.LogLevel = Ptr(level) } } return config } func (c *Config) WithRegion(region string) *Config { c.Region = Ptr(region) return c } func (c *Config) WithEndpoint(endpoint string) *Config { c.Endpoint = Ptr(endpoint) return c } func (c *Config) WithRetryMaxAttempts(value int) *Config { c.RetryMaxAttempts = Ptr(value) return c } func (c *Config) WithRetryer(retryer retry.Retryer) *Config { c.Retryer = retryer return c } func (c *Config) WithHttpClient(client *http.Client) *Config { c.HttpClient = client return c } func (c *Config) WithCredentialsProvider(provider credentials.CredentialsProvider) *Config { c.CredentialsProvider = provider return c } func (c *Config) WithUsePathStyle(enable bool) *Config { c.UsePathStyle = Ptr(enable) return c } func (c *Config) WithUseCName(enable bool) *Config { c.UseCName = Ptr(enable) return c } func (c *Config) WithConnectTimeout(value time.Duration) *Config { c.ConnectTimeout = Ptr(value) return c } func (c *Config) WithReadWriteTimeout(value time.Duration) *Config { c.ReadWriteTimeout = Ptr(value) return c } func (c *Config) WithInsecureSkipVerify(value bool) *Config { c.InsecureSkipVerify = Ptr(value) return c } func (c *Config) WithEnabledRedirect(value bool) *Config { c.EnabledRedirect = Ptr(value) return c } func (c *Config) WithProxyHost(value string) *Config { c.ProxyHost = Ptr(value) return c } func (c *Config) WithProxyFromEnvironment(value bool) *Config { c.ProxyFromEnvironment = Ptr(value) return c } func (c *Config) WithUploadBandwidthlimit(value int64) *Config { c.UploadBandwidthlimit = Ptr(value) return c } func (c *Config) WithDownloadBandwidthlimit(value int64) *Config { c.DownloadBandwidthlimit = Ptr(value) return c } func (c *Config) WithSignatureVersion(value SignatureVersionType) *Config { c.SignatureVersion = Ptr(value) return c } func (c *Config) WithLogLevel(level int) *Config { c.LogLevel = Ptr(level) return c } func (c *Config) WithLogPrinter(printer LogPrinter) *Config { c.LogPrinter = printer return c } func (c *Config) WithDisableSSL(value bool) *Config { c.DisableSSL = Ptr(value) return c } func (c *Config) WithUseDualStackEndpoint(value bool) *Config { c.UseDualStackEndpoint = Ptr(value) return c } func (c *Config) WithUseAccelerateEndpoint(value bool) *Config { c.UseAccelerateEndpoint = Ptr(value) return c } func (c *Config) WithUseInternalEndpoint(value bool) *Config { c.UseInternalEndpoint = Ptr(value) return c } func (c *Config) WithDisableUploadCRC64Check(value bool) *Config { c.DisableUploadCRC64Check = Ptr(value) return c } func (c *Config) WithDisableDownloadCRC64Check(value bool) *Config { c.DisableDownloadCRC64Check = Ptr(value) return c } func (c *Config) WithAdditionalHeaders(value []string) *Config { c.AdditionalHeaders = value return c } func (c *Config) WithUserAgent(value string) *Config { c.UserAgent = Ptr(value) return c } func (c *Config) WithCloudBoxId(value string) *Config { c.CloudBoxId = Ptr(value) return c } func (c *Config) WithEnableAutoDetectCloudBoxId(value bool) *Config { c.EnableAutoDetectCloudBoxId = Ptr(value) return c }