Ir para o conteúdo principal
WBC - GovBR-DS
Copiar página como Markdown para IA

Upload

Componente estável e recomendada para novos projetos.
Anatomia, uso, comportamento visual e recomendações conceituais são mantidos pelo Padrão Digital de Governo. Esta página documenta a implementação Web Components e sua API executável.

Visão Geral

Design System

Exemplo(s)

Desktop (100%)
Tablet - 768px
iPhone (iOS) - 390x844
Android - 360x800
Compartilhar URL
Mudar fundo
Abrir no StackBlitz
Tela cheia
HTML
Controles
JS
CSS
Console
Angular (Somente leitura)
React (Somente leitura)
Vue (Somente leitura)
Acessibilidade
Recolher controles e código
Formatar código
Resetar código para o estado inicial
Copiar para a área de transferência

Propriedades

accept

Atributoaccept
DescriçãoTipos de arquivo permitidos (ex.: 'image/*').
Tipostring
Valor padrão''

capture

Atributocapture
DescriçãoSugere a câmera usada na captura de imagem ou vídeo.
O navegador pode ignorar a preferência conforme dispositivo e permissões.
Tipo"" | "environment" | "user"
Valor padrão---

customId

Atributocustom-id
DescriçãoIdentificador único do componente.
Quando omitido, um valor é gerado automaticamente.

> Padrão: valor único gerado por generateUniqueId().
Tipostring
Valor padrãogenerateUniqueId()

disabled

Atributodisabled
DescriçãoDesabilita a interação com o componente.
Tipoboolean
Valor padrãofalse

existingFiles

Atributoexisting-files
DescriçãoArquivos já existentes. Quando informada, tem precedência sobre uploadFiles.
TipoIUploadFile[] | string
Valor padrão---

feedbackState

Atributofeedback-state
DescriçãoEstado de feedback canônico. Quando informado, tem precedência sobre state.
Tipo"danger" | "info" | "success" | "warning"
Valor padrão---

files

Atributo---
DescriçãoLista de arquivos selecionados, equivalente a HTMLInputElement.files.
TipoFileList
Valor padrãonull

label

Atributolabel
DescriçãoRótulo exibido acima do botão de upload.
Tipostring
Valor padrão'Envio de arquivo'

maxFileSize

Atributomax-file-size
DescriçãoTamanho máximo permitido para cada arquivo, em bytes. Zero significa sem limite.
Tiponumber
Valor padrão0

maxFiles

Atributomax-files
DescriçãoQuantidade máxima de arquivos. Zero significa sem limite.
Tiponumber
Valor padrão0

minFiles

Atributomin-files
DescriçãoQuantidade mínima de arquivos, incluindo arquivos já enviados.
Tiponumber
Valor padrão0

multiple

Atributomultiple
DescriçãoIndica se o componente permite a seleção de múltiplos arquivos.
Quando definido como true, o usuário pode selecionar mais de um arquivo para upload.
Tipoboolean
Valor padrãofalse

name

Atributoname
DescriçãoNome do campo enviado no formulário.
Tipostring
Valor padrão---

required

Atributorequired
DescriçãoSe verdadeiro, o input de upload é obrigatório antes que o formulário possa ser enviado.
Tipoboolean
Valor padrãofalse

state

Atributostate
DescriçãoEstado visual: 'info', 'warning', 'danger' ou 'success'.
Tipo"danger" | "info" | "success" | "warning"
Valor padrão---

uploadFiles Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.

Atributoupload-files
DepreciaçãoUse existingFiles.
Descrição
TipoIUploadFile[] | string
Valor padrão[]

uploadHandler

Atributo---
DescriçãoFunção assíncrona opcional fornecida pela aplicação para enviar cada arquivo.

O componente fornece o arquivo, um AbortSignal e uma função de progresso,
mas não conhece endpoint, autenticação nem formato de resposta.
Tipo(context: UploadHandlerContext) => Promise<void>
Valor padrão---

validator

Atributo---
DescriçãoRegra síncrona ou assíncrona aplicada à lista de arquivos selecionados.
O componente valida File[], mas não envia arquivos nem interpreta a
resposta do servidor.
Tipo(value: File[]) => string | Promise<string>
Valor padrão---

Slots

NomeDescrição
"default"Texto personalizado para o botão de upload. Se não fornecido, será exibido "Selecione o arquivo" como texto padrão. Use este slot para personalizar o texto do botão de acordo com o contexto do upload, por exemplo: "Anexar documentos", "Enviar imagens", etc.
"feedback"Mensagem de validação, normalmente um br-message.
"helper"Texto auxiliar exibido abaixo da superfície de seleção.
"label"Rótulo customizado do upload. Quando utilizado, a prop label é ignorada.
"loading"Conteúdo exibido enquanto o handler fornecido pela aplicação envia um arquivo.
"upload-list"Permite customizar a área de listagem de arquivos. Se utilizado, substitui a lista padrão gerada pelo componente.

Eventos

EventoDescriçãoDepreciaçãoPropagação
brRemove Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.Evento emitido quando um arquivo da lista uploadFiles (externos) é removido pelo usuário. O objeto emitido contém os dados do arquivo removido.Use brUploadRemove.true
brUploadCancelEmitido quando o usuário fecha a caixa de seleção de arquivos sem escolher nada.---true
brUploadErrorEmitido quando o uploadHandler falha ao enviar um arquivo.---true
brUploadProgressEmitido quando o uploadHandler informa o progresso de um arquivo.---true
brUploadRemoveEvento canônico emitido quando um arquivo existente é removido.---true
brUploadStartEmitido antes de o uploadHandler processar um arquivo.---true
brUploadSuccessEmitido quando o uploadHandler conclui um arquivo.---true
brUploadValidationChangeEmitido ao iniciar e concluir a validação customizada. O detail contém validating, valid e message.---true
selectedFilesChange Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.Emitido quando a lista de arquivos selecionados muda.Use input/change e leia event.target.files.true

Métodos

cancelUpload

DescriçãoCancela o envio atual iniciado pelo uploadHandler.
AssinaturacancelUpload() => Promise<void>
Parâmetros---

checkValidity

DescriçãoRetorna true se o valor do componente for válido, caso contrário false.
Se o componente for inválido, dispara um evento 'invalid'.
AssinaturacheckValidity() => Promise<boolean>
Parâmetros---

getValidationState

DescriçãoRetorna um snapshot serializável da Constraint Validation API.
AssinaturagetValidationState() => Promise<FormValidationState>
Parâmetros---

reportValidity

DescriçãoRetorna true se o valor do componente for válido, caso contrário false.
Se for inválido, exibe a mensagem de erro padrão do navegador.
AssinaturareportValidity() => Promise<boolean>
Parâmetros---

setCustomValidity

DescriçãoDefine uma mensagem de validação customizada para o upload.
Se a mensagem for uma string vazia, o erro customizado é limpo.
AssinaturasetCustomValidity(message: string) => Promise<void>
Parâmetrosmessage:

validate

DescriçãoExecuta o validator do upload e retorna se a lista atual é válida.
Assinaturavalidate() => Promise<boolean>
Parâmetros---

CSS Shadow Parts

NomeDescrição
"button"Botão de seleção de arquivo.
"container"Wrapper principal do upload.
"feedback"Contêiner da mensagem de validação.
"file-list"Lista de arquivos selecionados.
"helper"Texto auxiliar do upload.
"input"Elemento input de arquivo.
"label"Rótulo do campo de upload.
"loading"Estado e progresso do envio assíncrono.
"remove-button"Botão de remoção de arquivo.

Dependências

Depende de

Gráfico

Validação

Para o contrato geral e a matriz de componentes, consulte o guia de formulários. Esta seção documenta o contrato específico do br-upload.

Use required, min-files, max-files, accept e max-file-size conforme a regra do campo. O estado é exposto em files e enviado por FormData; navegadores não permitem atribuir programaticamente um FileList.

Para rejeições de domínio, use setCustomValidity() e limpe a mensagem após uma nova seleção válida. input e change são emitidos quando a lista muda.

A mensagem é renderizada como br-message quando não existe feedback. Use o slot feedback para fornecer o conteúdo e manter a referência ARIA.

Para regras de domínio síncronas ou assíncronas, use a propriedade JavaScript validator. Ela recebe File[] e retorna uma mensagem ou null. A validação também ocorre no change, pode ser acionada por await upload.validate() e emite brUploadValidationChange.

Acessibilidade

Forneça label visível, instruções de formatos/tamanho e uma mensagem textual de erro. O botão de escolher arquivo deve ter nome acessível e ser alcançável por teclado; ofereça também remoção individual sem depender de arrastar.

Associe mensagens com aria-describedby/aria-errormessage e mantenha aria-invalid sincronizado ao mostrar erro.

Eventos nativos

Elemento HTML de referência

br-upload combina <input type="file">, botão, drop zone e lista. O host representa o campo de arquivos.

Como ouvir os eventos

const upload = document.querySelector('br-upload');
upload.addEventListener('change', () => console.log(upload.files));

Eventos nativos suportados

EventoQuando ocorreBubblesComposedCancelableHostObservações
cancelseletor de arquivos é fechado sem nova seleçãoconforme o browserconforme o browserNãoSimRedisparado uma vez no host quando encapsulado pelo Shadow DOM.
changeseleção/drop/remoção é confirmadaSimSimNãoSimApós input.
inputlista de arquivos mudaSimSimNãoSimSintético após atualizar files; uma ocorrência.
click e focobotão/input são ativadosconforme o tipoSimconforme o tipoSimBotão encaminha a seleção ao file input.
drag/droparquivo cruza ou é solto na drop zoneconforme o tipoconforme o tipoconforme o tipoParcialDrop atual é tratado pelo botão interno.

Eventos não suportados ou ainda não caracterizados

Drag and drop real e cancel em Firefox/WebKit aguardam caracterização. Escrita em files, reset e inicialização são silenciosos. Eventos redisparados são sintéticos e não prometem isTrusted.

Eventos customizados

selectedFilesChange e brRemove são aliases depreciados. brUploadRemove representa remoção de arquivo já existente.

Valor, frameworks e acessibilidade

Leia event.target.files; FormData recebe cada arquivo pelo name. React usa ref, Angular usa file value accessor e Vue usa o model de arquivos. Label, botão e input compartilham o nome acessível.

Evidência de teste

src/shared/platform-contract.e2e.tsx usa userEvent.upload e cobre ordem, ausência de duplicação, target, caminho e FormData em Chromium headless. _tests/upload.e2e.tsx cobre lista, remoção, capture, cancel e handler de drop.