Baixe objetos de um bucket do OSS para um dispositivo local usando o método GetObject ou GetObjectToFile.
Observações de uso
O código de exemplo usa o ID da região
cn-hangzhou(China (Hangzhou)) e o endpoint público. Para acessar o bucket a partir de outros serviços da Alibaba Cloud na mesma região, use um endpoint interno. Para mais informações sobre regiões e endpoints do OSS, consulte Regiões e endpoints.As credenciais de acesso são obtidas de variáveis de ambiente. Para saber como configurar credenciais de acesso, consulte Configurar credenciais de acesso.
Permissões
Por padrão, uma conta Alibaba Cloud tem permissões totais. Usuários RAM ou funções RAM vinculados a 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 de políticas do RAM ou Bucket Policy.
|
API |
Ação |
Descrição |
|
GetObject |
|
Baixa um objeto. |
|
|
Necessária ao baixar um objeto especificando sua versão via versionId. |
|
|
|
Exigida quando os metadados do objeto contêm X-Oss-Server-Side-Encryption: KMS durante o download. |
Método
func (c *Client) GetObject(ctx context.Context, request *GetObjectRequest, optFns ...func(*Options)) (*GetObjectResult, error)
Parâmetros da solicitação
|
Parâmetro |
Tipo |
Descrição |
|
ctx |
context.Context |
Contexto da solicitação. Use-o para definir o tempo limite total da solicitação. |
|
request |
*GetObjectRequest |
Parâmetros da solicitação. GetObjectRequest. |
|
optFns |
...func(*Options) |
Opcional. Substituições de parâmetros no nível da operação. Options. |
Parâmetros de resposta
|
Parâmetro |
Tipo |
Descrição |
|
result |
*GetObjectResult |
Resposta da operação. Disponível quando err é nil. GetObjectResult. |
|
err |
error |
Erro retornado. Diferente de nil se a solicitação falhar. |
Código de exemplo
Para baixar um objeto de um bucket para um arquivo local:
package main
import (
"context"
"flag"
"io"
"log"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// Define the global variables.
var (
region string // The region in which the bucket is located.
bucketName string // The name of the bucket.
objectName string // The name of the object.
)
// Use the init function to initialize parameters.
func init() {
flag.StringVar(®ion, "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 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")
}
// Define the path of the output file.
outputFile := "downloaded.file" // Replace the string with the path of the output file.
// Load the default configurations and specify 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 query the object.
request := &oss.GetObjectRequest{
Bucket: oss.Ptr(bucketName), // The name of the bucket.
Key: oss.Ptr(objectName), // The name of the object.
}
// Query the object and process the results.
result, err := client.GetObject(context.TODO(), request)
if err != nil {
log.Fatalf("failed to get object %v", err)
}
defer result.Body.Close() // Close the response body when the function is complete.
// Read all data within the object.
data, err := io.ReadAll(result.Body)
if err != nil {
log.Fatalf("failed to read object %v", err)
}
// Write the data to a file.
err = os.WriteFile(outputFile, data, 0644)
if err != nil {
log.Fatalf("failed to write to output file %v", err)
}
log.Printf("file downloaded successfully to %s", outputFile)
}
Cenários comuns
Download condicional
Monitorar o progresso do download
Download em lote de objetos para dispositivo local
Referências
Código de exemplo completo: GitHub.
Referência da API: GetObjectToFile e GetObject.