SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
22.02.2025

Restringindo Tipos de Arquivos em Input: Apenas Imagens

Resposta Rápida

Para restringir os tipos de arquivos que um <input type="file"> pode aceitar, utilize o atributo accept com o valor *`image/** ou com extensões específicas como **.png**, **.jpg`**. Isso permitirá que apenas determinados formatos de imagem sejam selecionados. Abaixo, um exemplo de código:

<input type="file" accept="image/png, image/jpeg">

Com isso, apenas arquivos nos formatos PNG e JPEG poderão ser selecionados, simplificando e definindo claramente o processo de seleção de arquivos para os usuários.

Fundamentos do Uso do Elemento <input>

Filtragem do Lado do Cliente: O Primeiro Nível de Defesa

O atributo accept atua como um guia, direcionando os usuários a enviar arquivos no formato desejado. No entanto, é importante lembrar que isso é apenas uma filtragem do lado do cliente.

<!-- Atenção! Apenas imagens .png, .jpg e .jpeg são permitidas! -->
<input type="file" accept=".png, .jpg, .jpeg"> 

"Apenas Imagens" na Festança: Usando o Coringa image/*

O coringa *`image/`** permite o envio de arquivos de todos os tipos de imagem, abrindo as portas para todos os formatos gráficos.

<!-- Porta aberta para todos os tipos de imagem -->
<input type="file" accept="image/*"> 

Para Aqueles que Buscam a Perfeição: Melhorando os Envios com JavaScript

JavaScript também pode ser aplicado para validação adicional do lado do cliente, que aprimora a segurança. Isso é semelhante a uma verificação extra de documentos ao entrar em uma balada.

Validação do Lado do Servidor: Um Aspecto Fundamental da Segurança em Uploads de Arquivos

Verificações no Servidor: Validação Confiável

Embora a filtragem e o uso de JavaScript possam fornecer um certo nível de proteção, a verdadeira segurança é garantida somente por meio da validação do lado do servidor. Em PHP, funções como getimagesize() ou finfo_file() podem ser usadas para uma verificação completa dos arquivos.

// PHP prefere checar tudo por conta própria!
if(isset($_FILES['file']) && getimagesize($_FILES['file']['tmp_name'])) {
    // Processar a imagem verificada
}

Visualização

Pense no <input type="file"> como uma porta (🚪) para o sistema de arquivos do seu PC (📂):

Porta normal: 🚪<input type="file">
// Qualquer item pode passar por esta porta

Agora adicione um filtro (🔍) para imagens:

Porta com filtro de imagem: 🚪🔍<input type="file" accept="image/*">
// Agora apenas convidados VIP (🖼️) podem passar!

Suporte Variado de Navegadores e Dispositivos Móveis

Conheça Seu Público: Compatibilidade de Navegadores

Não se esqueça de testar sua solução em diferentes navegadores, incluindo suas versões mais antigas. Consulte o serviço Can I Use para informações de compatibilidade atualizadas.

Suporte para Dispositivos Móveis: Priorizando Ambientes Móveis

Dada a ampla utilização de dispositivos móveis, certifique-se de que a funcionalidade funciona corretamente em plataformas móveis. O suporte para o atributo accept pode variar de navegador para navegador.

Verificando a Compatibilidade do Atributo accept

Observe que o atributo accept é suportado no Internet Explorer 10+, Chrome, Firefox, Safari 6+ e Opera 15+.

Verificações do Servidor: Fortalecendo a Segurança

Não se esqueça de mitigar possíveis vulnerabilidades com verificações confiáveis do lado do servidor. Use isset() em PHP para validar os dados antes de processá-los.

Recursos Úteis

  1. html - Como restringir o formato de arquivo ao usar <input type="file">? - Stack Overflow — Discussões da comunidade sobre como limitar os tipos de arquivos.
  2. <input type="file"> - HTML: Linguagem de Marcação de Hipertexto | MDN — Orientação detalhada sobre o uso do atributo accept.
  3. Atributo accept para entrada HTML - W3Schools — Tutorial sobre o atributo accept.
  4. Padrão HTML - Elemento de Entrada — Padrão HTML para o elemento de entrada.
  5. Lista Completa de Tipos MIME - FreeFormatter.com — Referência de tipos MIME.
  6. Exemplo no Codepen: Botão Personalizado para Upload de Arquivo — Exemplo interativo de configuração de upload de arquivo personalizado.

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!