OSSClient是OSS的Go客户端,用于管理存储空间和文件等OSS资源。使用Go SDK发起OSS请求时,您需要初始化一个Client实例,并根据需要修改默认配置项。
前提条件
初始化OSSClient前,您需要配置访问凭证。详情请参见配置访问凭证。
新建OSSClient
您可以使用以下示例代码,通过加载默认配置的方法新建一个OSSClient。
package main
import (
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func main() {
var (
// 以华东1(杭州)为例
region = "cn-hangzhou"
// 以从环境变量中获取访问凭证为例
provider credentials.CredentialsProvider = credentials.NewEnvironmentVariableCredentialsProvider()
)
// 创建OSS客户端配置
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(provider).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
}
其中,指定区域region时,您可以指定向何处发送请求,例如cn-hangzhou或cn-shanghai。有关所支持的区域列表,请参阅OSS地域和访问域名。
因为Go SDK没有设置默认区域,所以您需要在加载配置时使用config.WithRegion作为参数显式设置区域。例如:
cfg := oss.LoadDefaultConfig().WithRegion("cn-hangzhou")
Go SDK V2默认使用V4签名,所以必须指定区域参数。
配置OSSClient
在大多数情况下,使用具有默认值的Client能够满足业务需求。您也可以更改Client的默认配置,或自定义HTTP Client,以满足特定环境下的使用需求。
设置OSSClient常用配置
您可以通过config修改常用的配置,示例如下:
cfg := oss.LoadDefaultConfig().
WithConnectTimeout(10 * time.Second).
UploadBandwidthlimit(10*1024)
常用配置参数汇总
Region | (必选)请求发送的区域, 必选 | WithRegion("cn-hangzhou") |
CredentialsProvider | (必选)设置访问凭证 | WithCredentialsProvider(provider) |
Endpoint | 访问域名 | WithEndpoint("oss-cn-hanghzou.aliyuncs.com") |
HttpClient | HTTP客户端 | WithHttpClient(customClient) |
RetryMaxAttempts | HTTP请求时的最大尝试次数, 默认值为 3 | WithRetryMaxAttempts(5) |
Retryer | HTTP请求时的重试实现 | WithRetryer(customRetryer) |
ConnectTimeout | 建立连接的超时时间, 默认值为 5 秒 | WithConnectTimeout(10 * time.Second) |
ReadWriteTimeout | 应用读写数据的超时时间, 默认值为 10 秒 | WithReadWriteTimeout(30 * time.Second) |
InsecureSkipVerify | 是否跳过SSL证书校验,默认检查SSL证书 | WithInsecureSkipVerify(true) |
EnabledRedirect | 是否开启HTTP重定向, 默认不开启 | WithEnabledRedirect(true) |
ProxyHost | 设置代理服务器 | WithProxyHost("http://user:passswd@proxy.example-***.com") |
ProxyFromEnvironment | 通过环境变量设置代理服务器 | WithProxyFromEnvironment(true) |
UploadBandwidthlimit | 整体的上传带宽限制,单位为 KiB/s | WithUploadBandwidthlimit(10*1024) |
DownloadBandwidthlimit | 整体的下载带宽限制,单位为 KiB/s | WithDownloadBandwidthlimit(10*1024) |
SignatureVersion | 签名版本,默认值为v4 | WithSignatureVersion(oss.SignatureVersionV1) |
LogLevel | 设置日志级别 | WithLogLevel(oss.LogInfo) |
LogPrinter | 设置日志打印接口 | WithLogPrinter(customPrinter) |
DisableSSL | 不使用https请求,默认使用https | WithDisableSSL(true) |
UsePathStyle | 使用路径请求风格,即二级域名请求风格,默认为bucket托管域名 | WithUsePathStyle(true) |
UseCName | 是否使用自定义域名访问,默认不使用 | WithUseCName(true) |
UseDualStackEndpoint | 是否使用双栈域名访问,默认不使用 | WithUseDualStackEndpoint(true) |
UseAccelerateEndpoint | 是否使用传输加速域名访问,默认不使用 | WithUseAccelerateEndpoint(true) |
UseInternalEndpoint | 是否使用内网域名访问,默认不使用 | WithUseInternalEndpoint(true) |
DisableUploadCRC64Check | 上传时关闭CRC64校验,默认开启CRC64校验 | WithDisableUploadCRC64Check(true) |
DisableDownloadCRC64Check | 下载时关闭CRC64校验,默认开启CRC64校验 | WithDisableDownloadCRC64Check(true) |
AdditionalHeaders | 指定额外的签名请求头,V4签名下有效 | WithAdditionalHeaders([]string{"content-length"}) |
UserAgent | 指定额外的User-Agent信息 | WithUserAgent("user identifier") |
自定义OSSClient
当常用配置参数无法满足场景需求时,您可以使用WithHTTPClient替换默认的HTTP客户端,示例如下:
package main
import (
"crypto/tls"
"net/http"
"time"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/transport"
)
func main() {
var (
// 以华东1(杭州)为例
region = "cn-hangzhou"
// 以从环境变量中获取访问凭证为例
provider credentials.CredentialsProvider = credentials.NewEnvironmentVariableCredentialsProvider()
)
// 常用超时或其它设置
transConfig := transport.Config{
// 连接超时, 默认值 5秒
ConnectTimeout: oss.Ptr(10 * time.Second),
// 应用读写数据的超时时间, 默认值 10秒
ReadWriteTimeout: oss.Ptr(20 * time.Second),
// 连接空闲超时时间, 默认值 50 秒
IdleConnectionTimeout: oss.Ptr(40 * time.Second),
// 网络连接的保持期限, 默认值 30 秒
KeepAliveTimeout: oss.Ptr(40 * time.Second),
// 是否打开启HTTP重定向,默认不启用
EnabledRedirect: oss.Ptr(true),
}
// http.Transport 设置
var transports []func(*http.Transport)
// 最大连接数,默认值 100
transports = append(transports, transport.MaxConnections(200))
// 如果请求有“Expect: 100-Continue”标头,则此设置表示完全写入请求标头后等待服务器第一个响应标头的最长时间,默认 1秒
transports = append(transports, transport.ExpectContinueTimeout(2*time.Second))
// TLS的最低版本,默认值 TLS 1.2
transports = append(transports, transport.TLSMinVersion(tls.VersionTLS13))
// 是否跳过证书检查,默认不跳过
transports = append(transports, transport.InsecureSkipVerify(true))
// 更多Transport参数设置,请参考 https://pkg.go.dev/net/http#Transport
// 创建自定义HTTP Client
customClient := transport.NewHttpClient(&transConfig, transports...)
cfg := oss.LoadDefaultConfig().
WithHttpClient(customClient).
WithCredentialsProvider(provider).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
}
相关文档
关于配置客户端的更多信息,请参见开发者指南。