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)
}
相關文檔
關于配置客戶端的更多信息,請參見開發者指南。