Object Storage Service (OSS) üzerinden yerel bilgisayarınıza 5 GB'tan büyük bir nesne indirirken ağ kesintileri veya program çökmeleri nedeniyle indirme işlemi başarısız olabilir. Nesne birden fazla denemeye rağmen indirilemezse kalan indirme yöntemini kullanarak büyük nesneyi indirebilirsiniz. İndirme hızını artırmak için nesneyi birden çok parçaya bölüp bu parçaları eş zamanlı olarak indirebilirsiniz. Kalan indirme sırasında ilerleme durumu bir kontrol noktası dosyasında kaydedilir. Bir parça indirilemezse sonraki indirme işlemi kontrol noktası dosyasında kaydedilen konumdan devam eder. Tüm parçalar indirildikten sonra birleştirilerek eksiksiz bir nesne oluşturulur.
Kullanım notları
Bu konuda Çin (Hangzhou) bölgesinin genel uç noktası kullanılmıştır. OSS ile aynı bölgedeki diğer Alibaba Cloud hizmetlerinden OSS'e erişmek için dahili uç nokta kullanın. OSS bölgeleri ve uç noktaları hakkında daha fazla bilgi için bkz. Bölgeler ve uç noktalar.
Bu konuda erişim kimlik bilgileri ortam değişkenlerinden alınır. Erişim kimlik bilgilerinin nasıl yapılandırılacağı hakkında daha fazla bilgi için bkz. Erişim kimlik bilgilerini yapılandırma.
Bu konu bir OSS uç noktası kullanarak bir OSSClient örneğinin nasıl oluşturulacağını gösterir. Özel etki alanı kullanımı veya Security Token Service (STS) kimlik bilgileriyle kimlik doğrulama gibi alternatif yapılandırmalar için bkz. İstemci yapılandırma (Go SDK V1).
Kalan indirme özelliğini kullanmak için
oss:GetObjectiznine sahip olmanız gerekir. Daha fazla bilgi için bkz. Özel ilke atama.Kalan indirme sırasında ilerleme durumu bir kontrol noktası dosyasında kaydedilir. Bir parça indirilemezse sonraki indirme işlemi kontrol noktası dosyasında kaydedilen konumdan devam eder. Kalan indirme tamamlandığında kontrol noktası dosyası silinir.
OSS SDK for Go indirme ilerlemesini kontrol noktası dosyasında kaydeder. Kontrol noktası dosyasına yazma izniniz olduğundan emin olun.
Kontrol noktası dosyasında bulunan sağlama toplamını değiştiremezsiniz. Kontrol noktası dosyası hasar görürse tüm parçaları yeniden indirmeniz gerekir.
Nesnenin ETag değeri tutarsızsa veya indirme sırasında parçalar kaybolur ya da değiştirilirse nesneyi yeniden indirmeniz gerekir.
Örnekler
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
/// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint.
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Specify the version of the signature algorithm.
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Specify the name of the bucket. Example: examplebucket.
bucket, err := client.Bucket("examplebucket")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt.
// Specify the full path of the local file. Example: D:\\localpath\\examplefile.txt. If you do not specify the path of the local file, the downloaded object is saved to the path of the project to which the sample program belongs.
// Set the size of each part that you want to download to 100 KB (100 x 1024) and set the number of concurrent download parts to 3.
// oss.Checkpoint(true, "") Specify that resumable download is enabled. By default, the checkpoint file and the downloaded object are stored in the same directory and share the same name. However, the extension of the checkpoint file is .temp. You can also use oss.Checkpoint(true, "your-cp-file.temp") to specify the name of the checkpoint file.
err = bucket.DownloadFile("file.zip", "D:\\file.zip", 100*1024, oss.Routines(3), oss.Checkpoint(true, ""))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}