Você pode fazer isso usando o atributo accept
e adicionando tipos MIME permitidos a ele. Mas nem todos os navegadores respeitam esse atributo e pode ser facilmente removido por meio de algum inspetor de código. Portanto, em qualquer caso, você precisa verificar o tipo de arquivo no lado do servidor (sua segunda pergunta).
Exemplo:
<input type="file" name="upload" accept="application/pdf,application/vnd.ms-excel" />
À sua terceira pergunta "E quando eu clicar nos arquivos (PDF / XLS) na página da web, ele deve abrir automaticamente.":
Você não pode conseguir isso. O modo como um PDF ou XLS é aberto na máquina cliente é definido pelo usuário.
você pode usar isto:
HTML
suporte apenas. PDF e. Arquivos XLS
fonte
Infelizmente, não há uma maneira garantida de fazer isso no momento da seleção.
Alguns navegadores oferecem suporte ao
accept
atributo deinput
tags. Este é um bom começo, mas não pode ser totalmente confiável.Você pode usar um
cfinput
e executar uma validação para verificar a extensão do arquivo no envio, mas não o tipo MIME. Isso é melhor, mas ainda não é à prova de idiotas. Os arquivos no OSX geralmente não têm extensões de arquivo ou os usuários podem identificar os tipos de arquivo de forma mal-intencionada.O ColdFusion
cffile
pode verificar o tipo mime usando acontentType
propriedade do result (cffile.contentType
), mas isso só pode ser feito após o upload. Esta é sua melhor aposta, mas ainda não é 100% segura, pois os tipos MIME podem estar errados.fonte
accept
atributo nainput
tag pode ser adicionado, mas não é 100% eficaz.Você pode usar JavaScript. Leve em consideração que o grande problema em fazer isso com JavaScript é redefinir o arquivo de entrada. Bem, isso se restringe apenas a JPG (para PDF, você terá que alterar o tipo MIME e o número mágico ):
Leve em consideração que isso foi testado nas versões mais recentes do Firefox e do Chrome e no IExplore 10.
Para obter uma lista completa dos tipos de mime, consulte a Wikipedia .
Para uma lista completa de números mágicos, consulte a Wikipedia .
fonte
Eu filtraria os arquivos do lado do servidor, porque existem ferramentas, como Live HTTP Headers no Firefox que permitiriam fazer upload de qualquer arquivo, incluindo um shell. As pessoas podem hackear seu site. Faça isso no site do servidor, para ser seguro.
fonte
Embora este exemplo específico seja para um upload de vários arquivos, ele fornece as informações gerais necessárias:
https://developer.mozilla.org/en-US/docs/DOM/File.type
Quanto a atuar sobre um arquivo / download /, esta não é uma questão de Javascript - mas sim uma configuração de servidor. Se um usuário não tiver algo instalado para abrir arquivos PDF ou XLS, sua única opção será baixá-los.
fonte
Se você deseja que o controle de upload de arquivo limite os tipos de arquivos que o usuário pode fazer upload com um clique de botão, este é o caminho.
Você pode então chamar a função de um evento como o onClick do botão acima, que se parece com:
Você pode alterar isso para:
PDF
eXLS
Você pode ver isso implementado aqui: Demo
fonte
accept
atributo -atributo, este método não restringe o conteúdo da pasta para os tipos de arquivo selecionados ao selecionar um arquivo na máquina local.