A implementação de um upload de arquivo sob html é bastante simples, mas notei que existe um atributo 'accept' que pode ser adicionado à <input type="file" ...>
tag.
Esse atributo é útil como forma de limitar o upload de arquivos para imagens, etc.? Qual é a melhor maneira de usá-lo?
Como alternativa, existe uma maneira de limitar os tipos de arquivo, de preferência na caixa de diálogo, para uma marca de entrada de arquivo html?
html
filter
cross-browser
mime-types
Darren Oster
fonte
fonte
input type="file"
a validação de que apenasaccept
os tipos de arquivo ed podem ser escolhidos.Respostas:
O
accept
atributo é incrivelmente útil. É uma dica para os navegadores mostrarem apenas os arquivos permitidos para o atualinput
. Embora normalmente possa ser substituído pelos usuários, ajuda a restringir os resultados para os usuários por padrão, para que eles possam obter exatamente o que estão procurando, sem precisar peneirar centenas de tipos de arquivos diferentes.Uso
Nota: Esses exemplos foram escritos com base na especificação atual e podem não funcionar de fato em todos (ou quaisquer) navegadores. A especificação também pode mudar no futuro, o que pode quebrar esses exemplos.
Na especificação HTML ( origem )
fonte
accept='.jpg,.png,.gif,.pdf,.eps'
não permitia nenhuma seleção. Eu tentei muitas variações - espaço delimitado, sem caracteres ponto, etc., mas não dados em v20 Chrome, então acabei usando os tipos MIME e funcionou muito bem:accept='image/jpeg,image/gif,image/png,application/pdf,image/x-eps'
image/*
. Vadio.Value: A set of comma-separated strings, each of which is a valid MIME type, with no parameters.
apenas tipos de mímica. Sem extensões. Cabe ao cliente determinar o tipo de mímica.A string whose first character is a U+002E FULL STOP character (.) -- Indicates that files with the specified file extension are accepted.
video/*
significa que você não pode carregar mp4 no Safari, você também precisará especificarvideo/mp4
Sim, é extremamente útil em navegadores que o suportam, mas a "limitação" é uma conveniência para os usuários (para que eles não sejam sobrecarregados com arquivos irrelevantes), e não uma maneira de impedir que eles carreguem coisas que você não deseja. Enviando.
É suportado em
Aqui está uma lista dos tipos de conteúdo que você pode usar com ele, seguidos pelas extensões de arquivo correspondentes (embora, é claro, você possa usar qualquer extensão de arquivo):
fonte
accept=".ttf"
funciona como esperado.Em 2015, a única maneira que encontrei para fazê-lo funcionar no Chrome e no Firefox é colocar todas as extensões possíveis que você deseja oferecer suporte, incluindo variantes:
Problema com o Firefox : Usar o
image/jpeg
tipo MIME O Firefox mostrará apenas.jpg
arquivos, muito estranhos como se o comum.jpeg
não estivesse ok ...Faça o que fizer, tente com arquivos com muitas extensões diferentes. Talvez até dependa do sistema operacional ... Acho que não diferencia
accept
maiúsculas de minúsculas, mas talvez não em todos os navegadores.Aqui estão os documentos MDN sobre Accept :
fonte
O atributo Accept foi introduzido no RFC 1867 , com a intenção de habilitar a filtragem de tipo de arquivo com base no tipo MIME para o controle de seleção de arquivo. Mas a partir de 2008, a maioria, se não todos, os navegadores não usam esse atributo. Usando scripts do lado do cliente, você pode fazer uma espécie de validação baseada em extensão, para enviar dados do tipo correto (extensão).
Outras soluções para upload avançado de arquivos requerem filmes em Flash, como SWFUpload, ou Java Applets, como JUpload .
fonte
É suportado pelo Chrome. Não é para ser usado para validação, mas para indicar o sistema operacional. Se você tiver um
accept="image/jpeg"
atributo em um upload de arquivo, o SO poderá mostrar apenas arquivos do tipo sugerido.fonte
accept="image/*"
funciona no Firefox, Chrome e Opera.accept="text/plain"
vez disso.Já se passaram alguns anos, e o Chrome pelo menos faz uso desse atributo. Esse atributo é muito útil do ponto de vista da usabilidade, pois filtra os arquivos desnecessários para o usuário, tornando sua experiência mais suave. No entanto, o usuário ainda pode selecionar "todos os arquivos" do tipo (ou ignorar o filtro); portanto, você sempre deve validar o arquivo onde ele é realmente usado; Se você o estiver usando no servidor, valide-o antes de usá-lo. O usuário sempre pode ignorar qualquer script do lado do cliente.
fonte
Se o navegador usar esse atributo, ele será apenas uma ajuda para o usuário, portanto ele não fará o upload de um arquivo de vários megabytes apenas para vê-lo rejeitado pelo servidor ... O
mesmo para a
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
tag: se o navegador o usar, ele não enviará o arquivo, mas um erro resultando emUPLOAD_ERR_FORM_SIZE
(2) erro no PHP (não tenho certeza de como ele é tratado em outros idiomas).Observe que estas são ajuda para o usuário . Obviamente, o servidor sempre deve verificar o tipo e tamanho do arquivo no final: é fácil violar esses valores no lado do cliente.
fonte
Em 2008, isso não era importante por causa da falta de sistemas operacionais móveis, mas agora coisa muito importante.
Quando você define tipos de mímica aceitos, por exemplo, no usuário do Android, é exibida uma caixa de diálogo do sistema com aplicativos que podem fornecer a ele o conteúdo de mime que a entrada de arquivo aceita, o que é ótimo porque navegar pelos arquivos no explorador de arquivos em dispositivos móveis é lento e muitas vezes estressante .
Uma coisa importante é que alguns navegadores móveis (baseados na versão Android do Chrome 36 e Chrome Beta 37) não suportam a filtragem de aplicativos por extensões e vários tipos MIME.
fonte