Este tópico descreve como usar o módulo Uploader do SDK Go V2 para fazer upload de arquivos.
Notas de uso
O código de exemplo neste tópico usa o ID da região
cn-hangzhoupara a região China (Hangzhou). Por padrão, um endpoint público é usado para acessar recursos em um bucket. Se você quiser acessar recursos do bucket usando outros serviços da Alibaba Cloud na mesma região, use o endpoint interno. Para obter mais informações sobre regiões e endpoints do OSS, consulte Regiões e endpoints.Neste tópico, as credenciais de acesso são recuperadas de variáveis de ambiente. Para obter mais informações sobre como configurar credenciais de acesso, consulte Configurar credenciais de acesso.
Para fazer upload de um arquivo grande, você deve ter a permissão
oss:PutObject. Para obter mais informações, consulte Anexar uma política personalizada a um usuário RAM.
Definição do método
Introdução ao Uploader
O Uploader no SDK Go V2 simplifica uploads de arquivos fornecendo uma operação de alto nível que oculta os detalhes de implementação subjacentes.
O Uploader usa a operação de upload multipart para dividir um arquivo grande ou fluxo em várias partes menores e faz upload das partes simultaneamente para melhorar o desempenho.
O Uploader também fornece o recurso de upload retomável. Este recurso registra o status das partes concluídas durante o processo de upload. Se o upload do arquivo falhar devido a problemas como interrupções de rede ou exceções de programa, você pode retomar o upload a partir do registro do ponto de interrupção na próxima vez que tentar fazer upload do arquivo.
O código de exemplo a seguir mostra como usar o Uploader:
type Uploader struct {
...
}
// Cria um novo uploader.
func (c *Client) NewUploader(optFns ...func(*UploaderOptions)) *Uploader
// Faz upload de um fluxo de arquivo.
func (u *Uploader) UploadFrom(ctx context.Context, request *PutObjectRequest, body io.Reader, optFns ...func(*UploaderOptions)) (*UploadResult, error)
// Faz upload de um arquivo local.
func (u *Uploader) UploadFile(ctx context.Context, request *PutObjectRequest, filePath string, optFns ...func(*UploaderOptions)) (*UploadResult, error)
Parâmetros de solicitação
|
Parâmetro |
Tipo |
Descrição |
|
ctx |
context.Context |
O contexto da solicitação. |
|
request |
*PutObjectRequest |
Os parâmetros de solicitação para fazer upload de um objeto. Os parâmetros são os mesmos da operação PutObject. Para obter mais informações, consulte PutObjectRequest. |
|
body |
io.Reader |
O fluxo a ser carregado.
|
|
filePath |
string |
O caminho do arquivo local. |
|
optFns |
...func(*UploaderOptions) |
(Opcional) Opções de configuração. |
A tabela a seguir descreve os parâmetros comuns de UploaderOptions.
|
Parâmetro |
Tipo |
Descrição |
|
PartSize |
int64 |
O tamanho da parte. O valor padrão é 6 MiB. |
|
ParallelNum |
int |
O número de tarefas de upload simultâneas. O valor padrão é 3. Este parâmetro especifica o limite de concorrência para uma única chamada, não o limite de concorrência global. |
|
LeavePartsOnError |
bool |
Especifica se deve reter as partes carregadas quando um upload falha. Por padrão, as partes carregadas não são retidas. |
|
EnableCheckpoint |
bool |
Especifica se deve habilitar o recurso de upload retomável. Por padrão, este recurso está desabilitado. Nota
O parâmetro EnableCheckpoint é válido apenas para a operação UploadFile e não é suportado pela operação UploadFrom. |
|
CheckpointDir |
string |
O caminho onde o arquivo de ponto de verificação é salvo. Exemplo: /local/dir/. Este parâmetro é válido somente quando EnableCheckpoint é definido como true. |
Quando você instancia um Uploader usando NewUploader, pode especificar opções de configuração para personalizar o comportamento do upload. Essas opções podem ser definidas para a instância do Uploader para aplicar a todos os uploads, ou especificadas para cada operação de upload individual.
-
Defina os parâmetros de configuração para o Uploader
u := client.NewUploader(func(uo *oss.UploaderOptions) { uo.PartSize = 10 * 1024 * 1024 }) -
Defina os parâmetros de configuração para cada solicitação de upload
request := &oss.PutObjectRequest{Bucket: oss.Ptr("bucket"), Key: oss.Ptr("key")} result, err := u.UploadFile(context.TODO(), request, "/local/dir/example", func(uo *oss.UploaderOptions) { uo.PartSize = 10 * 1024 * 1024 })
Exemplos
Você pode usar o código de exemplo a seguir para fazer upload de um arquivo local para um bucket usando o Uploader.
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"
)
// Defina variáveis globais.
var (
region string // A região de armazenamento.
bucketName string // O nome do bucket.
objectName string // O nome do objeto.
)
// A função init é usada para inicializar parâmetros de linha de comando.
func init() {
flag.StringVar(®ion, "region", "", "A região em que o bucket está localizado.")
flag.StringVar(&bucketName, "bucket", "", "O nome do bucket.")
flag.StringVar(&objectName, "object", "", "O nome do objeto de origem.")
}
func main() {
// Analise os parâmetros da linha de comando.
flag.Parse()
// Verifique se o nome do bucket está vazio.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parâmetros inválidos, nome do bucket obrigatório")
}
// Verifique se a região está vazia.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parâmetros inválidos, região obrigatória")
}
// Verifique se o nome do objeto está vazio.
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("parâmetros inválidos, nome do objeto de origem obrigatório")
}
// Carregue as configurações padrão e defina o provedor de credenciais e a região.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// Crie um cliente OSS.
client := oss.NewClient(cfg)
// Crie um uploader.
u := client.NewUploader()
// Defina o caminho do arquivo local. Você precisa substituir o caminho pelo caminho e nome do arquivo local real.
localFile := "/Users/seuCaminhoLocal/seuNomeDeArquivo"
// Faça o upload do arquivo.
result, err := u.UploadFile(context.TODO(),
&oss.PutObjectRequest{
Bucket: oss.Ptr(bucketName),
Key: oss.Ptr(objectName)},
localFile)
if err != nil {
log.Fatalf("falha ao fazer upload do arquivo %v", err)
}
// Imprima o resultado do upload.
log.Printf("resultado do upload do arquivo:%#v\n", result)
}
Cenários comuns
Habilite o recurso de upload retomável usando o uploader
Use o uploader para fazer upload de um fluxo de arquivo local
Use o uploader para definir o tamanho da parte e a concorrência
Use o uploader para definir callbacks de upload
Use o uploader para exibir um gráfico de barra de progresso
Referências
Para obter mais informações sobre o Uploader, consulte Guia do Desenvolvedor.
Para obter mais informações sobre as operações de API que você pode usar para fazer upload de arquivos grandes, consulte UploadFrom e UploadFile.