本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
使用Go SDK V2发起OSS请求时,您需要初始化一个OSS Client实例,并根据需要修改默认配置项。
注意事项
初始化OSS Client前,您需要配置访问凭证,本文以从环境变量读取访问凭证为例,更多配置示例请参见配置访问凭证。
关于OSS支持的Region与Endpoint的对应关系,请参见OSS地域和访问域名。
前置条件
在配置客户端前,您需要先使用RAM用户AccessKey完成配置环境变量。
使用RAM用户AccessKey配置环境变量。
Linux
在命令行界面执行以下命令来将环境变量设置追加到
~/.bashrc
文件中。echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
执行以下命令使变更生效。
source ~/.bashrc
执行以下命令检查环境变量是否生效。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
macOS
在终端中执行以下命令,查看默认Shell类型。
echo $SHELL
根据默认Shell类型进行操作。
Zsh
执行以下命令来将环境变量设置追加到
~/.zshrc
文件中。echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
执行以下命令使变更生效。
source ~/.zshrc
执行以下命令检查环境变量是否生效。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Bash
执行以下命令来将环境变量设置追加到
~/.bash_profile
文件中。echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile
执行以下命令使变更生效。
source ~/.bash_profile
执行以下命令检查环境变量是否生效。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Windows
CMD
在CMD中运行以下命令。
setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
运行以下命令,检查环境变量是否生效。
echo %OSS_ACCESS_KEY_ID% echo %OSS_ACCESS_KEY_SECRET%
PowerShell
在PowerShell中运行以下命令。
[Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
运行以下命令,检查环境变量是否生效。
[Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
参考上述方式修改系统环境变量后,请重启或刷新您的编译运行环境,包括IDE、命令行界面、其他桌面应用程序及后台服务,以确保最新的系统环境变量成功加载。
默认配置示例
Go SDK V2默认使用V4签名,在初始化Client时,您需要指定阿里云通用Region ID作为发起请求地域的标识,本示例代码使用华东1(杭州)Region ID:cn-hangzhou。如需查询其它Region ID请参见OSS地域和访问域名。
Go SDK V2可以通过Endpoint参数,自定义服务请求的访问域名。当不指定时,SDK默认根据Region信息,构造公网访问域名。例如当Region为'cn-hangzhou'时,构造出来的访问域名为'https://oss-cn-hangzhou.aliyuncs.com'。
Go SDK V2构造访问域名时默认采用https协议,如需采用http协议,请在指定域名时指定为http,例如'http://oss-cn-hangzhou.aliyuncs.com'。
package main
import (
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func main() {
// 方式一:只填写Region即可
// 填写Bucket所在地域,以华东1(杭州)为例,Region填写为cn-hangzhou
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion("cn-hangzhou")
// 方式二:直接填写Region和Endpoint
// 填写Bucket所在地域,以华东1(杭州)为例,Region填写为cn-hangzhou
// 填写Bucket所在地域对应的公网Endpoint,以华东1(杭州)为例,Endpoint填写为'https://oss-cn-hangzhou.aliyuncs.com'。如需指定为http协议,请在指定域名时填写为'http://oss-cn-hangzhou.aliyuncs.com'
// cfg := oss.LoadDefaultConfig().
// WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
// WithRegion("cn-hangzhou").
// WithEndpoint("https://oss-cn-hangzhou.aliyuncs.com")
// 创建OSS客户端
client := oss.NewClient(cfg)
// 使用client执行后续操作...
}
常见场景配置示例
内网域名配置示例
当您的应用部署在阿里云的ECS实例上,并且需要频繁访问同地域的OSS资源时,使用内网域名可以降低流量成本并提高访问速度。
以下是使用OSS内网域名配置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()
// 方式一:填写Region并设置WithUseInternalEndpoint为true
// 填写Bucket所在地域,以华东1(杭州)为例,Region填写为cn-hangzhou
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion("cn-hangzhou").
WithUseInternalEndpoint(true)
// 方式二:直接填写Region和Endpoint
// 填写Bucket所在地域,以华东1(杭州)为例,Region填写为cn-hangzhou
// 填写Bucket所在地域对应的内网Endpoint,以华东1(杭州)为例,Endpoint填写为'https://oss-cn-hangzhou-internal.aliyuncs.com'。如需指定为http协议,请在指定域名时填写为'http://oss-cn-hangzhou-internal.aliyuncs.com'
// cfg := oss.LoadDefaultConfig().
// WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
// WithRegion("cn-hangzhou").
// WithEndpoint("https://oss-cn-hangzhou-internal.aliyuncs.com")
// 创建OSS客户端
client := oss.NewClient(cfg)
// 使用client执行后续操作...
}
自定义域名配置示例
当您有多个不同的OSS Bucket用于不同的目的时,可以通过为每个Bucket设置不同的子域名来更好地管理和组织资源。
以下是使用自定义域名配置OSSClient的示例代码。
您需要先将自定义域名绑定至Bucket默认域名,否则将引发报错!关于绑定自定义域名的详细操作,请参见绑定自定义域名至Bucket默认域名。
package main
import (
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func main() {
// 填写Bucket所在地域,以华东1(杭州)为例,Region填写为cn-hangzhou
// 请填写您的自定义域名,例如https://www.example-***.com
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion("cn-hangzhou").
WithEndpoint("https://www.example-***.com").
WithUseCName(true) // 请注意,设置true开启CNAME选项,否则无法使用自定义域名
// 创建OSS客户端
client := oss.NewClient(cfg)
// 使用client执行后续操作...
}
传输加速域名配置示例
以下是使用传输加速域名配置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() {
// 方式一:填写Region并设置WithUseAccelerateEndpoint为true
// 填写Bucket所在地域,以华东1(杭州)为例,Region填写为cn-hangzhou
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion("cn-hangzhou").
WithUseAccelerateEndpoint(true)
// 方式二:直接填写Region和Endpoint
// 填写Bucket所在地域,以华东1(杭州)为例,Region填写为cn-hangzhou
// 填写Bucket所在地域对应的传输加速Endpoint,以华东1(杭州)为例,Endpoint填写为'https://oss-accelerate.aliyuncs.com'。如需指定为http协议,请在指定域名时填写为'http://oss-accelerate.aliyuncs.com'
// cfg := oss.LoadDefaultConfig().
// WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
// WithRegion("cn-hangzhou").
// WithEndpoint("https://oss-accelerate.aliyuncs.com").
// 创建OSS客户端
client := oss.NewClient(cfg)
// 使用client执行后续操作...
}
专有域配置示例
以下是使用专有域配置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() {
// 填写Bucket所在地域,以华东1(杭州)为例,Region填写为cn-hangzhou
// 请填写您的专有域,例如:https://service.corp.example.com
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion("cn-hangzhou").
WithEndpoint("https://service.corp.example.com")
// 创建OSS客户端
client := oss.NewClient(cfg)
// 使用client执行后续操作...
}
金融云配置示例
以下是使用金融云域名配置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() {
// 填写Region和Endpoint
// 填写Bucket所在地域。以华东1 金融云为例,Region填写为cn-hangzhou-finance
// 填写Bucket所在地域对应的内网Endpoint。以华东1 金融云为例,Endpoint填写为'https://oss-cn-hzjbp-a-internal.aliyuncs.com',
// 如需指定为http协议,请在指定域名时填写为'http://oss-cn-hzjbp-a-internal.aliyuncs.com'
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion("cn-hangzhou-finance").
WithEndpoint("https://oss-cn-hzjbp-a-internal.aliyuncs.com")
// 创建OSS客户端
client := oss.NewClient(cfg)
// 使用client执行后续操作...
}
政务云配置示例
以下是使用政务云域名配置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() {
// 填写Region和Endpoint
// 填写Bucket所在地域。以华北2 阿里政务云1为例,Region填写为cn-north-2-gov-1
// 填写Bucket所在地域对应的内网Endpoint。以华北2 阿里政务云1为例,Endpoint填写为'https://oss-cn-north-2-gov-1-internal.aliyuncs.com',
// 如需指定为http协议,请在指定域名时填写为'http://oss-cn-north-2-gov-1-internal.aliyuncs.com'
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion("cn-north-2-gov-1").
WithEndpoint("https://oss-cn-north-2-gov-1-internal.aliyuncs.com")
// 创建OSS客户端
client := oss.NewClient(cfg)
// 使用client执行后续操作...
}
访问云盒Bucket配置示例
以下是设置OSSClient以访问云盒bucket的示例代码。
package main
import (
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func main() {
// 方式一:自动检测云盒ID
// 填写Bucket所在地域,以华东1(杭州)为例,Region填写为cn-hangzhou
// 填写Endpoint为云盒bucket的数据域名,例如:http://cb-xxxxxx.cn-hangzhou.oss-cloudbox.aliyuncs.com
// 设置WithEnableAutoDetectCloudBoxId为true,自动检测云盒ID
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithEndpoint("http://cb-xxxxxx.cn-hangzhou.oss-cloudbox.aliyuncs.com").
WithEnableAutoDetectCloudBoxId(true)
// 方式二:手动设置云盒ID
// 填写Bucket所在地域,以华东1(杭州)为例,Region填写为cn-hangzhou
// 填写Endpoint为云盒bucket的数据域名,例如:http://cb-xxxxxx.cn-hangzhou.oss-cloudbox.aliyuncs.com
// 手动填写云盒ID,例如:cb-xxxxxx
// cfg := oss.LoadDefaultConfig().
// WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
// WithEndpoint("http://cb-xxxxxx.cn-hangzhou.oss-cloudbox.aliyuncs.com").
// WithCloudBoxId("cb-xxxxxx")
// 创建OSS客户端
client := oss.NewClient(cfg)
// 使用client执行后续操作...
}
连接超时配置示例
以下代码用于设置OSSClient的连接超时时间。
package main
import (
"time"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func main() {
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion("cn-hangzhou"). // 填写Bucket所在地域,以华东1(杭州)为例,Region填写为cn-hangzhou
WithConnectTimeout(10 * time.Second). // 设置连接超时时间,默认值为5秒
WithReadWriteTimeout(30 * time.Second) // 设置读写超时时间,默认值为10秒
// 创建OSS客户端
client := oss.NewClient(cfg)
// 使用client执行后续操作...
}
HTTPClient配置示例
当常用配置参数无法满足场景需求时,您可以使用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() {
// 常用超时或其它设置
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(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion("cn-hangzhou")
// 创建OSS客户端
client := oss.NewClient(cfg)
// 使用client进行后续操作...
}
配置参数汇总
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") |
常见问题
如果您希望通过与OSS同地域的其他阿里云产品访问OSS,如何提升传输速度?
如何查看RAM用户的AK信息?
如果遇到报错问题该如何查询具体的错误类型?
相关文档
关于配置客户端的更多信息,请参见开发者指南。