Por padrão, a operação GetObject retorna apenas a versão atual de um objeto em um bucket com versionamento ativado.
Informações básicas
Ao chamar a operação GetObject em um bucket, ocorre um dos três cenários seguintes:
Se a versão atual do objeto for um marcador de exclusão, o OSS retorna 404 Not Found.
Caso você especifique o versionId de um objeto no parâmetro de consulta, a versão especificada será retornada. Se definir o versionId como "null", o sistema retorna a versão do objeto que possui um versionId nulo.
Quando há uma tentativa de recuperar um marcador de exclusão por meio da especificação de seu versionId, o OSS retorna 405 Method Not Allowed.
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 obter 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 mais sobre como configurar credenciais de acesso, veja Configure credenciais de acesso.
O conteúdo a seguir 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 Configure um cliente (Go SDK V1).
É necessário ter a permissão
oss:GetObjectpara baixar um objeto. Para mais detalhes, acesse Conceder uma política personalizada.
Código de exemplo
O código abaixo apresenta um exemplo de como baixe um arquivo.
package main
import (
"log"
"net/http"
"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 set.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// Create an OSSClient instance.
// Set yourEndpoint to the Endpoint of the bucket. For example, for a bucket in the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com. For other regions, set the Endpoint as needed.
// Set yourRegion to the region where the bucket is located. For example, for a bucket in the China (Hangzhou) region, set the region to cn-hangzhou. For other regions, set the region as needed.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Set the signature version.
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// Set yourBucketName to the name of the bucket.
bucketName := "yourBucketName"
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket '%s': %v", bucketName, err)
}
var retHeader http.Header
// Download the file of the yourObjectVersionId version to the cache.
// Set yourObjectName to the full path of the object. The full path does not include the bucket name.
objectName := "yourObjectName"
objectVersionId := "yourObjectVersionId"
_, err = bucket.GetObject(objectName, oss.VersionId(objectVersionId), oss.GetResponseHeader(&retHeader))
if err != nil {
log.Fatalf("Failed to get object '%s' with version ID '%s': %v", objectName, objectVersionId, err)
}
// Print x-oss-version-id.
versionId := oss.GetVersionId(retHeader)
log.Printf("x-oss-version-id: %s", versionId)
}
Referências
Para visualizar o código de exemplo completo sobre baixe de arquivos, acesse o exemplo no GitHub.
Mais detalhes sobre a operação de API utilizada para baixe arquivos estão disponíveis em GetObject.