Como criar uma boa experiência de upload de arquivos

Aprenda a orientar, validar e acompanhar uploads de arquivos com clareza, acessibilidade e recuperação simples de erros.

Área de upload com arquivo, seta de envio e indicador de conclusão
Nível de impácto
Alto
Status
Recomendado
Nível de evidênica
Forte evidência

Contexto

Enviar um arquivo envolve escolher um item fora da interface, conferir restrições, aguardar processamento e entender se a operação terminou. Quando o componente não informa formatos, limites, progresso ou erros, a pessoa pode selecionar o arquivo errado, repetir a ação ou perder o trabalho.

Uma boa experiência de upload torna os requisitos visíveis antes da seleção, oferece botão acessível, permite arrastar e soltar como alternativa, mostra o estado de cada arquivo e explica como recuperar falhas.

Apresente uma ação clara para selecionar arquivos e informe antes da escolha os formatos aceitos, o tamanho máximo, a quantidade permitida, se o envio é obrigatório e a finalidade do arquivo quando houver dúvida.

Use o campo nativo de arquivo como base. O atributo accept pode orientar o seletor do sistema, mas não substitui a validação no servidor.

Depois da seleção, mostre o nome do arquivo, o tamanho e, quando útil, uma miniatura ou prévia. Permita remover ou substituir cada item sem reiniciar todo o formulário.

Em uploads assíncronos, mostre estados distintos para carregando, concluído, rejeitado, interrompido e com erro. Se possível, ofereça tentar novamente ou selecionar outro arquivo.

Quando vários arquivos forem aceitos, apresente o resultado de cada um separadamente. Um arquivo inválido não deve esconder o estado dos demais.

Componente File uploader do Carbon com botão Add file e arquivo certificate.pem selecionado
Exemplo real: o Carbon Design System mostra um botão para adicionar arquivo e mantém certificate.pem visível com ação de remoção; isso exemplifica seleção, confirmação do arquivo e recuperação. Fonte: https://carbondesignsystem.com/components/file-uploader/usage/

Porque isso importa?

A pessoa precisa saber o que pode enviar, o que está acontecendo e como recuperar uma falha. A ausência dessas informações transforma uma tarefa simples em tentativa e erro.

Design systems como Carbon, Polaris, USWDS e GOV.BR documentam padrões recorrentes: botão de seleção, área opcional de arrastar e soltar, lista de arquivos, feedback de processamento, remoção e mensagens de erro.

Esses exemplos mostram soluções de implementação, não uma regra universal. A escolha deve considerar o tipo de arquivo, o tamanho, a conexão, o dispositivo, a importância da tarefa e o nível de sensibilidade dos dados.

  • Quando documentos forem necessários para concluir a tarefa.
  • Quando a pessoa puder enviar um ou mais arquivos.
  • Quando o processamento demorar.
  • Quando formatos ou tamanhos precisarem ser limitados.
  • Quando arquivos puderem falhar individualmente.
  • Quando arrastar e soltar trouxer conveniência sem ser a única opção.
  • Quando o documento não for realmente necessário.
  • Quando o upload for apenas uma preferência interna da equipe.
  • Quando a interface aceitar arquivos sem explicar as restrições.
  • Quando o sistema não mostrar progresso ou resultado.
  • Quando vários arquivos forem enviados dentro de um modal estreito.
  • Quando arrastar e soltar for a única forma de selecionar o arquivo.
Componente File input do USWDS com áreas para arrastar ou escolher arquivos e instruções de formatos
Exemplo real: o USWDS apresenta inputs para um arquivo, tipos específicos e múltiplos arquivos, com instruções sobre formatos; isso torna as restrições compreensíveis antes da seleção. Fonte: https://designsystem.digital.gov/components/file-input/

Recomendações

Faça

Práticas recomendadas
  • Explique formatos e limites.
  • Use um botão claro.
  • Mostre os arquivos selecionados.
  • Indique o progresso.
  • Permita remover e substituir.
  • Explique cada erro.
  • Ofereça nova tentativa.
  • Valide também no servidor.
Área de upload com arquivo selecionado, progresso e confirmação de conclusão
Ilustração didática: a interface mostra o arquivo selecionado, o envio em andamento e a confirmação final; cada estado comunica o que ocorreu.

Evite

Práticas a evitar
  • Não exija arrastar e soltar.
  • Não esconda os limites.
  • Não use feedback genérico.
  • Não bloqueie a tela sem necessidade.
  • Não apague arquivos válidos.
  • Não aceite tipos apenas pelo nome.
  • Não dependa só do navegador.
Área de upload com arquivo e falha indicada sem explicação ou ação de recuperação
Ilustração didática: o erro interrompe o envio sem explicar a causa nem oferecer recuperação clara.
Componente Upload do Design System Gov.br com área de envio de arquivos
Exemplo real: o Design System Gov.br combina rótulo, área de transferência e ação de seleção; a documentação também descreve o uso com formulários e estados de carregamento. Isso exemplifica uma entrada visível e contextualizada. Fonte: https://www.gov.br/ds/components/upload?tab=designer

Acessibilidade

Use um <label> associado ao input type="file" e mantenha a seleção possível pelo teclado. A área de arrastar e soltar deve ser uma alternativa, nunca o único caminho.

Informe os requisitos em texto e associe instruções e mensagens ao campo. Não dependa apenas de cor, ícone ou mudança visual para comunicar sucesso ou erro.

Anuncie mudanças importantes, como arquivo selecionado, upload concluído ou falha. Evite anunciar cada atualização pequena de progresso de forma excessiva.

Mantenha foco previsível após o seletor de arquivos fechar. Em listas de arquivos, cada ação de remover ou substituir deve ter nome acessível e funcionar com teclado.

Valide extensão, tipo real, tamanho, autorização e conteúdo no servidor. Arquivos enviados não devem ser tratados como confiáveis apenas porque o navegador aceitou a seleção.

Checklist

  • Os formatos aceitos estão descritos?
  • O tamanho máximo está informado?
  • A quantidade de arquivos está clara?
  • Existe um botão acessível para selecionar arquivos?
  • Arrastar e soltar é apenas uma alternativa?
  • Os arquivos selecionados são identificados?
  • Cada arquivo possui estado próprio?
  • O progresso do envio é compreensível?
  • É possível remover ou substituir um arquivo?
  • Os erros explicam como corrigir?
  • Existe opção de tentar novamente?
  • A seleção funciona com teclado?
  • As atualizações são comunicadas a tecnologias assistivas?
  • A validação também ocorre no servidor?
  • A solução foi testada em mobile, zoom, teclado e leitor de tela?

Referências

  • W3C WAI, Forms Tutorial. Sustenta o uso de rótulos, instruções, validação, feedback e controles nativos em formulários. Consultar o tutorial.
  • W3C WCAG 2.2, 3.3.2 Labels or Instructions. Sustenta a necessidade de instruções quando a interface exige entrada de dados. Consultar o critério.
  • MDN, accept attribute. Explica que accept orienta a seleção, mas não substitui a validação no servidor. Consultar a documentação.
  • OWASP, File Upload Cheat Sheet. Sustenta validação de tipo, tamanho, autorização, armazenamento seguro e análise do conteúdo. Consultar o guia.
  • IBM Carbon, File uploader. Referência contextual para botão, drop zone, estados de carregamento, remoção, erro e navegação por teclado. Uso e acessibilidade.
  • Shopify Polaris, Drop zone. Referência contextual para seleção por botão, arrastar e soltar, restrições de tipo, erro e processamento. Consultar o componente.
  • U.S. Web Design System, File input. Referência contextual para campo nativo, rótulos, restrições, múltiplos arquivos e progressive enhancement. Consultar o componente.
  • Padrão Digital de Governo, Upload. Referência brasileira para seleção por clique, arrastar e soltar, envio único, múltiplos arquivos e feedback de erro. Consultar o componente.
  • Padrão Digital de Governo, Loading. Referência brasileira para indicar processamento durante uploads. Consultar o componente.
  • Baymard Institute, Form Design. Referência aplicada para redução de fricção e clareza em formulários de tarefas críticas, com limite de generalização para uploads. Consultar a pesquisa.
Veja também

Esta recomendação foi útil para você?