Todos os produtos
Search
Central de documentação

Object Storage Service:Download por intervalo com o OSS SDK for Go 2.0

Última atualização: Sep 22, 2026

O download por intervalo permite que você baixe um intervalo específico de bytes de um objeto, em vez do arquivo inteiro.

Notas de uso

  • O código de exemplo usa o ID da região China (Hangzhou) cn-hangzhou e um endpoint público. Para acessar o OSS a partir de outros serviços da Alibaba Cloud na mesma região, use um endpoint interno. Para obter mais informações sobre as regiões e os endpoints compatíveis, consulte Regions and endpoints.

  • Neste tópico, as credenciais de acesso são obtidas a partir de variáveis de ambiente. Para obter mais informações, consulte Configure access credentials.

Permissões

Por padrão, uma conta Alibaba Cloud tem permissões totais. Os usuários ou funções do RAM em uma conta Alibaba Cloud não têm permissões por padrão. A conta Alibaba Cloud ou o administrador da conta deve conceder as permissões de operação por meio do RAM policies ou Bucket Policy.

API

Ação

Descrição

GetObject

oss:GetObject

Baixa um objeto.

oss:GetObjectVersion

Ao baixar um objeto, se você especificar a versão do objeto por meio do versionId, essa permissão é necessária.

kms:Decrypt

Ao baixar um objeto, se os metadados do objeto contiverem X-Oss-Server-Side-Encryption: KMS, essa permissão é necessária.

Definição do método

func (c *Client) GetObject(ctx context.Context, request *GetObjectRequest, optFns ...func(*Options)) (*GetObjectResult, error)

Parâmetros da requisição

Parâmetro

Tipo

Descrição

ctx

context.Context

O contexto da requisição, que você pode usar para definir o tempo limite total da requisição.

request

*GetObjectRequest

Os parâmetros da requisição. Defina o parâmetro Range e especifique o intervalo de download, e defina o parâmetro RangeBehavior para ativar o comportamento padrão de download por intervalo. Para obter mais informações, consulte GetObjectRequest.

optFns

...func(*Options)

Opcional. Substituições de parâmetros no nível da operação. Para obter mais informações, consulte Options.

Valores de retorno

Valor de retorno

Tipo

Descrição

result

*GetObjectResult

A resposta da operação da API. Válido quando err é nil. Para obter mais informações, consulte GetObjectResult.

err

error

A mensagem de erro. Diferente de nil se a requisição falhar.

Importante
  • Para um objeto de 1.000 bytes, o intervalo de download válido vai do byte 0 ao byte 999. Se o intervalo especificado for inválido, o parâmetro Range não terá efeito. A resposta retorna um código de status 200 e o objeto inteiro é transferido. Os exemplos a seguir descrevem requisições inválidas e seus resultados:

    • Caso defina Range: bytes=500-2000, o fim do intervalo é inválido. A resposta retorna o arquivo inteiro e o código de status HTTP é 200.

    • Caso defina Range: bytes=1000-2000, o início do intervalo é inválido. A resposta retorna o arquivo inteiro e o código de status HTTP é 200.

  • Adicione o cabeçalho de requisição x-oss-range-behavior:standard e especifique o comportamento padrão de download por intervalo. Isso altera o comportamento de download do OSS para intervalos inválidos. Para um objeto de 1.000 bytes:

    • Caso defina Range: bytes=500-2000, o fim do intervalo é inválido. A resposta retorna os dados do byte 500 ao byte 999 e o código de status HTTP é 206.

    • Caso defina Range: bytes=1000-2000, o início do intervalo é inválido. A resposta retorna um código de status HTTP 416 e o código de erro InvalidRange.

Código de exemplo

O código de exemplo a seguir adiciona o cabeçalho de requisição RangeBehavior:standard para baixar um intervalo de bytes especificado com o comportamento de download padrão.

package main

import (
	"context"
	"flag"
	"io"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Define global variables.
var (
	region     string // The region.
	bucketName string // The bucket name.
	objectName string // The object name.
)

// The init function is used to initialize command-line parameters.
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

func main() {
	// Parse command-line parameters.
	flag.Parse()

	// Check whether the bucket name is empty.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// Check whether the region is empty.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// Check whether the object name is empty.
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// Load the default configurations and set the credential provider and region.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Create an OSS client.
	client := oss.NewClient(cfg)

	// Create a request to get the object.
	request := &oss.GetObjectRequest{
		Bucket:        oss.Ptr(bucketName),     // The bucket name.
		Key:           oss.Ptr(objectName),     // The object name.
		Range:         oss.Ptr("bytes=15-35"), // Specify the download range.
		RangeBehavior: oss.Ptr("standard"),     // Specify the standard range download behavior.
	}

	// Execute the operation to get the object and process the result.
	result, err := client.GetObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to get object %v", err)
	}
	defer result.Body.Close() // Make sure that the response body is closed when the function ends.

	log.Printf("get object result:%#v\n", result)

	// Read the content of the object.
	data, _ := io.ReadAll(result.Body)
	log.Printf("body:%s\n", data)
}

Referências