Todos os produtos
Search
Central de documentação

Object Storage Service:Baixa condicional (OSS SDK for Go 1.0)

Última atualização: Sep 22, 2026

Ao baixar um único objeto de um bucket, você pode especificar condições de baixa com base no horário da última modificação ou no ETag (identificador do conteúdo do objeto). Se as condições especificadas estiverem satisfeitas, o objeto será baixado. Caso contrário, o sistema retorna um erro e não realiza a baixa. Use a baixa condicional para reduzir a transmissão pela rede, diminuir o consumo de recursos e aumentar a eficiência do processo.

Observações

  • Este tópico usa o endpoint público da região China (Hangzhou). Caso queira acessar o OSS a partir de outros serviços da Alibaba Cloud na mesma região, use um endpoint interno. Para mais informações sobre as regiões e os endpoints do OSS, consulte Regions and endpoints.

  • Neste tópico, você obtém as credenciais de acesso a partir de variáveis de ambiente. Para mais informações sobre como configurar as credenciais de acesso, consulte Configure access credentials.

  • Este tópico mostra como criar uma instância do OSSClient com um endpoint do OSS. Para configurações alternativas, como o uso de domínio personalizado ou a autenticação com credenciais do Security Token Service (STS), consulte Configure a client (Go SDK V1).

  • O download condicional requer a permissão oss:GetObject. Para mais informações, consulte Grant a custom policy.

Condições

A tabela a seguir descreve as condições disponíveis para a baixa de objetos.

Nota
  • Você pode usar If-Modified-Since e If-Unmodified-Since juntos. Também é possível usar If-Match e If-None-Match em conjunto.

  • Obtenha o ETag chamando ossClient.getObjectMetadata.

Parâmetro

Descrição

Método de configuração

If-Modified-Since

O objeto pode ser baixado se o horário especificado for anterior ao último horário de modificação do objeto. Caso contrário, retorna 304 Not Modified.

oss.IfModifiedSince

If-Unmodified-Since

O objeto pode ser baixado se o horário especificado for posterior ou igual ao último horário de modificação do objeto. Caso contrário, retorna 412 Precondition Failed.

oss.IfUnmodifiedSince

If-Match

O objeto pode ser baixado se o ETag especificado corresponder ao ETag do objeto. Caso contrário, retorna 412 Precondition Failed.

oss.IfMatch

If-None-Match

O objeto pode ser baixado se o ETag especificado for diferente do ETag do objeto. Caso contrário, retorna 304 Not Modified.

oss.IfNoneMatch

Exemplos

O código de exemplo a seguir mostra como executar a baixa condicional:

package main

import (
	"fmt"
	"os"
	"time"

	"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 your bucket.
	bucket, err := client.Bucket("yourBucketName")
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// For example, an object was last modified at 18:43:02, on November 21, 2023. If the specified time is earlier than the last modified time, the object meets the If-Modified-Since condition and the object is downloaded. 
	date := time.Date(2023, time.November, 21, 10, 40, 02, 0, time.UTC)

	// The object is not downloaded if it does not meet the specified conditions. 
        // Specify the full path of the object. Do not include the bucket name in the full path. 
	err = bucket.GetObjectToFile("yourObjectName", "LocalFile", oss.IfUnmodifiedSince(date))
	if err == nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// The object is downloaded if it meets the specified conditions. 
	err = bucket.GetObjectToFile("yourObjectName", "LocalFile", oss.IfModifiedSince(date))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
}

Referências

  • Para ver o código completo de exemplo usado para executar a baixa condicional, acesse o GitHub.

  • Para mais informações sobre a operação de API que você pode chamar para executar a baixa condicional, consulte GetObject.