Este tópico descreve como fazer upload rápido de arquivos locais para o Object Storage Service (OSS) por meio do upload simples. Esse método é direto e ideal para cenários que exigem transferência ágil de arquivos locais.
Observações
Os códigos de exemplo deste tópico usam o ID da região
cn-hangzhou, correspondente à região China (Hangzhou). Por padrão, o acesso aos recursos de um bucket ocorre via endpoint público. Para acessar esses recursos por meio de outros serviços da Alibaba Cloud na mesma região do bucket, use o endpoint interno. Para mais informações sobre regiões e endpoints do OSS, consulte Regiões e endpoints.Neste tópico, as credenciais de acesso são obtidas a partir de variáveis de ambiente. Para saber como configurar essas credenciais, consulte Configurar credenciais de acesso.
Permissões
Por padrão, uma conta Alibaba Cloud tem permissões completas. Usuários RAM ou funções RAM vinculados a essa conta não têm permissão inicialmente. A conta Alibaba Cloud ou o administrador da conta deve conceder as permissões operacionais por meio de políticas do RAM ou Bucket Policy.
|
API |
Ação |
Descrição |
|
PutObject |
|
Faz o upload de um objeto. |
|
|
Necessário quando tags de objeto são especificadas pelo cabeçalho |
|
|
|
Obrigatório se o cabeçalho |
|
|
|
Método
func (c *Client) PutObject(ctx context.Context, request *PutObjectRequest, optFns ...func(*Options)) (*PutObjectResult, error)
func (c *Client) PutObjectFromFile(ctx context.Context, request *PutObjectRequest, filePath string, optFns ...func(*Options)) (*PutObjectResult, error)
|
Operação |
Descrição |
|
Client.PutObject |
Realiza upload simples para objetos de até 5 GiB. Oferece suporte a CRC-64 (ativado por padrão). Exibe o progresso da tarefa de upload na barra de progresso. Aceita corpo de requisição do tipo io.Reader. Se o corpo for do tipo io.Seeker, o objeto será reenviado automaticamente em caso de falha no upload. |
|
Client.PutObjectFromFile |
Fornece a mesma funcionalidade que Client.PutObject. Obtém o corpo da requisição diretamente do caminho do arquivo local. |
Parâmetros da requisição
|
Parâmetro |
Tipo |
Descrição |
|
ctx |
context.Context |
Contexto da requisição, utilizado para definir a duração total da operação. |
|
request |
*PutObjectRequest |
Parâmetros específicos da API, como Acl, ForbidOverwrite e Metadata. Para mais informações, acesse PutObjectRequest. |
|
optFns |
...func(*Options) |
Opcional. Parâmetro no nível da operação. Consulte Options para detalhes. |
Parâmetros de resposta
|
Parâmetro |
Tipo |
Descrição |
|
result |
*PutObjectResult |
Resposta da operação. Este parâmetro é válido apenas quando err for nil. Veja mais em PutObjectResult. |
|
err |
error |
Status da requisição. Em caso de falha, o valor de err não será nil. |
Exemplos
O código abaixo demonstra como enviar um arquivo local para um bucket específico:
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// Specify 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.
)
// Specify the init function used to initialize command line 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 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 specify the credential provider and region.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// Create an OSSClient instance.
client := oss.NewClient(cfg)
// Specify the path of the local file that you want to upload. Example: /Users/localpath/exampleobject.txt.
localFile := "/Users/localpath/exampleobject.txt"
// Create a request to upload the local file.
putRequest := &oss.PutObjectRequest{
Bucket: oss.Ptr(bucketName), // Specify the name of the bucket.
Key: oss.Ptr(objectName), // Specify the name of the object.
StorageClass: oss.StorageClassStandard, // Set the storage class of the object to Standard.
Acl: oss.ObjectACLPrivate, // Set the access control list (ACL) of the object to private.
Metadata: map[string]string{
"yourMetadataKey 1": "yourMetadataValue 1", // Specify the metadata of the object.
},
}
// Execute the request to upload the local file.
result, err := client.PutObjectFromFile(context.TODO(), putRequest, localFile)
if err != nil {
log.Fatalf("failed to put object from file %v", err)
}
// Display the result of the object upload operation.
log.Printf("put object from file result:%#v\n", result)
}
Cenários comuns
Fazer upload de uma string
Fazer upload de um array de bytes
Fazer upload de um fluxo de rede
Exibir o progresso durante o upload
Configurar callback ao fazer upload de arquivo local
Referências
Para acessar o código completo de exemplo sobre upload simples, visite put_object.go e put_object_from_file.go.
Saiba mais sobre as operações de API disponíveis para upload simples em PutObject e PutObjectFromFile.