Este tópico descreve como usar o download por intervalo para baixar, de forma eficiente, uma faixa específica de dados de um objeto.
Observações
Este tópico utiliza o endpoint público da região China (Hangzhou). Para acessar o OSS a partir de outros serviços da Alibaba Cloud na mesma região, utilize um endpoint interno. Para mais informações sobre regiões e endpoints do OSS, consulte Regiões e endpoints.
As credenciais de acesso neste exemplo são obtidas de variáveis de ambiente. Para saber como configurar credenciais de acesso, consulte Configurar credenciais de acesso.
Este tópico demonstra a criação de uma instância OSSClient com um endpoint do OSS. Para configurações alternativas, como uso de domínio personalizado ou autenticação com credenciais do Security Token Service (STS), consulte Configurar um cliente (Go SDK V1).
Para baixar dados por intervalo, é necessária a permissão
oss:GetObject. Para mais detalhes, consulte Conceder uma política personalizada.
Código de exemplo
O código de exemplo a seguir baixa uma faixa específica de dados de um objeto.
package main
import (
"io"
"log"
"strings"
"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 {
log.Fatalf("Error: %v", err)
}
// 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 {
log.Fatalf("Error: %v", err)
}
// Specify the name of the bucket.
bucketName := "yourBucketName"
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Error: %v", err)
}
// Upload 1,000 bytes.
strContent := ""
for i := 0; i < 100; i++ {
strContent += "abcdefghij"
}
log.Printf("content len: %d\n", len(strContent))
// Upload a string.
objectName := "yourObjectName"
err = bucket.PutObject(objectName, strings.NewReader(strContent))
if err != nil {
log.Fatalf("Error: %v", err)
}
// Query the data that is within the range from byte 15 to byte 35, which includes a total of 21 bytes.
// If the specified value range is invalid, the entire object is downloaded. For example, if the specified range includes a negative number or the specified value is greater than the object size, all content of the object is downloaded.
body, err := bucket.GetObject(objectName, oss.Range(15, 35))
if err != nil {
log.Fatalf("Error: %v", err)
}
defer body.Close()
// Read the data and load it into the memory.
data, err := io.ReadAll(body)
if err != nil {
log.Fatalf("Error: %v", err)
}
log.Printf("data: %s", string(data))
}