OSS SDK for Go'nun V1 ve V2 sürümleri arasındaki temel değişiklikleri kapsar; içe aktarma yolları, yapılandırma, API işlemleri, önceden imzalı URL'ler, kaldığı yerden devam eden aktarımlar ve şifreleme konularını içerir.
Minimum Go Sürümü
V2, Go 1.18 veya sonraki bir sürümü gerektirir.
İçe Aktarma Yolları
V2, kodun işlevsel modüllere göre düzenlendiği yeni bir depo (alibabacloud-oss-go-sdk-v2) kullanır.
|
Modül yolu
|
Açıklama
|
|
github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss
|
Temel ve gelişmiş API işlemleri için çekirdek modül.
|
|
github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials
|
Erişim kimlik bilgileri.
|
|
github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/retry
|
Yeniden deneme ilkeleri.
|
|
github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/signer
|
İmzalar.
|
|
github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/transport
|
HTTP istemcileri.
|
|
github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/crypto
|
İstemci taraflı şifreleme.
|
OSS SDK for Go V1 Örneği
import (
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
OSS SDK for Go V2 Örneği
import (
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
// Import retry, transport, or signer based on your business requirements.
//"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/xxxx"
)
Yapılandırma
V2, ayarları config içinde birleştirir ve geçersiz kılmalar için With önekli yardımcı işlevler sağlar.
V2 varsayılan olarak V4 imzalarını kullanır; bu nedenle bölgeyi belirtmeniz gerekir.
V2 uç noktayı bölgeden türetir. Genel cloud erişimi için açık bir uç nokta belirtilmesine gerek yoktur.
OSS SDK for Go V1 Örneği
import (
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
...
// Obtain access credentials from environment variables.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
// Set the timeout period of an HTTP connection to 20 and the read or write timeout period of an HTTP connection to 60. Unit: seconds.
time := oss.Timeout(20,60)
// Do not verify SSL certificates.
verifySsl := oss.InsecureSkipVerify(true)
// Specify logs.
logLevel := oss.SetLogLevel(oss.LogInfo)
// Endpoint
endpoint := "oss-cn-hangzhou.aliyuncs.com"
client, err := oss.New(endpoint, "", "", oss.SetCredentialsProvider(&provider), time, verifySsl, logLevel)
OSS SDK for Go V2 Örneği
import (
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
...
// Obtain access credentials from environment variables.
provider := credentials.NewEnvironmentVariableCredentialsProvider()
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(provider).
// Set the timeout period of an HTTP connection to 20. Unit: seconds.
WithConnectTimeout(20 * time.Second).
// Set the read or write timeout period of an HTTP connection to 60. Unit: seconds.
ReadWriteTimeout(60 * time.Second).
// Do not verify SSL certificates.
WithInsecureSkipVerify(true).
// Specify logs.
WithLogLevel(oss.LogInfo).
// Specify the region.
WithRegion("cn-hangzhou")
client := oss.NewClient(cfg)
İstemci Oluşturma
V2, New yöntemini NewClient ile değiştirir; bu yöntem artık uç nokta, AK veya SK parametrelerini doğrudan kabul etmez.
OSS SDK for Go V1 Örneği
client, err := oss.New(endpoint, "ak", "sk")
OSS SDK for Go V2 Örneği
client := oss.NewClient(cfg)
API İşlemleri
V2, her API'yi <OperationName> adlı tek bir Client yönteminde birleştirir; istek türü <OperationName>Request ve yanıt türü <OperationName>Result şeklindedir. Her çağrı bir context.Context gerektirir. Söz dizimi:
func (c *Client) <OperationName>(ctx context.Context, request *<OperationName>Request, optFns ...func(*Options)) (*<OperationName>Result,, error)
Temel API işlemleri.
OSS SDK for Go V1 Örneği
import "github.com/aliyun/aliyun-oss-go-sdk/oss"
...
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
bucket, err := client.Bucket("examplebucket")
err = bucket.PutObject("exampleobject.txt", bytes.NewReader([]byte("example data")))
OSS SDK for Go V2 Örneği
import "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
import "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
...
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion("your region")
client := oss.NewClient(cfg)
result, err := client.PutObject(context.TODO(), &oss.PutObjectRequest{
Bucket: oss.Ptr("examplebucket"),
Key: oss.Ptr("exampleobject.txt"),
Body: bytes.NewReader([]byte("example data")),
})
Önceden İmzalı URL'ler
V2, önceden imzalama yöntemini SignURL yerine Presign olarak yeniden adlandırır ve bunu Client'a taşır. Söz dizimi:
func (c *Client) Presign(ctx context.Context, request any, optFns ...func(*PresignOptions)) (*PresignResult, error)
request parametresi türü, ilgili API'deki '<OperationName>Request' ile eşleşir.
Yanıt, önceden imzalı URL'yi, HTTP yöntemini, sona erme zamanını ve imzalanan üst bilgileri içerir. Örnek:
type PresignResult struct {
Method string
URL string
Expiration time.Time
SignedHeaders map[string]string
}
Önceden imzalı URL.
Aşağıdaki örneklerde V1 ve V2'de önceden imzalı bir indirme URL'si oluşturulmaktadır:
OSS SDK for Go V1 Örneği
import "github.com/aliyun/aliyun-oss-go-sdk/oss"
...
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
bucket, err := client.Bucket("examplebucket")
signedURL, err := bucket.SignURL("exampleobject.txt", oss.HTTPGet, 60)
fmt.Printf("Sign Url:%s\n", signedURL)
OSS SDK for Go V2 Örneği
import "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
import "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
...
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion("your region")
client := oss.NewClient(cfg)
result, err := client.Presign(
context.TODO(),
&oss.GetObjectRequest{
Bucket: oss.Ptr("examplebucket"),
Key: oss.Ptr("exampleobject.txt"),
},
oss.PresignExpires(60*time.Second),
)
fmt.Printf("Sign Method:%v\n", result.Method)
fmt.Printf("Sign Url:%v\n", result.URL)
fmt.Printf("Sign Expiration:%v\n", result.Expiration)
for k, v := range result.SignedHeaders {
fmt.Printf("SignedHeader %v:%v\n", k, v)
}
Kaldığı Yerden Devam Eden Aktarımlar
V2, V1 kaldığı yerden devam etme yöntemlerinin (Bucket.UploadFile, Bucket.DownloadFile, Bucket.CopyFile) yerine aktarım yöneticilerini kullanır: Uploader, Downloader ve Copier.
Aşağıdaki tabloda V1 yöntemleri V2 eşdeğerleriyle eşleştirilmiştir.
|
Senaryo
|
v2
|
v1
|
|
Nesne yükleme
|
Uploader.UploadFile
|
Bucket.UploadFile
|
|
Akış yükleme (io.Reader)
|
Uploader.UploadFrom
|
Desteklenmiyor
|
|
Nesneyi yerel bilgisayara indirme
|
Downloader.DownloadFile
|
Bucket.DownloadFile
|
|
Nesne kopyalama
|
Copier.Copy
|
Bucket.CopyFile
|
Varsayılan değerlerdeki değişiklikler
|
Senaryo
|
v2
|
v1
|
|
Nesne yükleme parça boyutu
|
6 MiB
|
Parametreleri belirterek parça boyutunu yapılandırın
|
|
Nesne yükleme eşzamanlılık varsayılan değeri
|
%3
|
%1
|
|
Nesne yükleme boyutu eşiği
|
Parça boyutu
|
Yok
|
|
Nesne yükleme ilerlemesini kontrol noktası dosyasında kaydetme
|
Destekleniyor
|
Destekleniyor
|
|
Nesne indirme parça boyutu
|
6 MiB
|
Parametreleri belirterek parça boyutunu yapılandırın
|
|
Nesne indirme eşzamanlılık varsayılan değeri
|
%3
|
%1
|
|
Nesne indirme boyutu eşiği
|
Parça boyutu
|
Yok
|
|
Nesne indirme ilerlemesini kontrol noktası dosyasında kaydetme
|
Destekleniyor
|
Destekleniyor
|
|
Nesne kopyalama parça boyutu
|
64 MiB
|
Bucket.UploadFile
|
|
Nesne kopyalama eşzamanlılık varsayılan değeri
|
%3
|
%1
|
|
Nesne kopyalama boyutu eşiği
|
200 MiB
|
Yok
|
|
Nesne kopyalama ilerlemesini kontrol noktası dosyasında kaydetme
|
Desteklenmiyor
|
Destekleniyor
|
Not
Bir nesne boyut eşiğini aştığında, V2 otomatik olarak çok parçalı yükleme, indirme veya kopyalama kullanır.
Aktarım yöneticileri.
İstemci Taraflı Şifreleme
V2, istemci taraflı şifreleme için EncryptionClient sunar; bu bileşen, Client ile aynı adlandırma kurallarını ve çağrı desenlerini izler. V2 yalnızca RSA tabanlı, kendi kendine yönetilen CMK'lar için örnekler sağlar.
KMS tabanlı bir örnek şu adreste mevcuttur: sample/crypto/kms.go.
İstemci taraflı şifreleme.
Aşağıdaki örneklerde V1 ve V2'de RSA tabanlı CMK şifrelemesiyle bir nesne yüklenmektedir:
V1
import "github.com/aliyun/aliyun-oss-go-sdk/oss"
import "github.com/aliyun/aliyun-oss-go-sdk/oss/crypto"
...
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
materialDesc := make(map[string]string)
materialDesc["desc"] = "your master encrypt key material describe information"
masterRsaCipher, err := osscrypto.CreateMasterRsa(materialDesc, "yourRsaPublicKey", "yourRsaPrivateKey")
contentProvider := osscrypto.CreateAesCtrCipher(masterRsaCipher)
cryptoBucket, err := osscrypto.GetCryptoBucket(client, "examplebucket", contentProvider)
err = cryptoBucket.PutObject("exampleobject.txt", bytes.NewReader([]byte("example data")))
V2
import "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
import "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
import "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/crypto"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion("your region")
client := oss.NewClient(cfg)
materialDesc := make(map[string]string)
materialDesc["desc"] = "your master encrypt key material describe information"
mc, err := crypto.CreateMasterRsa(materialDesc, "yourRsaPublicKey", "yourRsaPrivateKey")
eclient, err := NewEncryptionClient(client, mc)
result, err := eclient.PutObject(context.TODO(), &PutObjectRequest{
Bucket: Ptr("examplebucket"),
Key: Ptr("exampleobject.txt"),
Body: bytes.NewReader([]byte("example data")),
})
Yeniden Deneme İlkelerini Yapılandırma
V2 varsayılan olarak HTTP isteklerini yeniden dener. Aşırı yeniden denemelerden kaçınmak için V1 kodunuzdaki tüm özel yeniden deneme mantığını kaldırın.