Esta semana tive a necessidade de ao clicar sobre um link de um arquivo efetuar o download do mesmo, por padrão o navegador estava interpretando-o e exibindo seu conteúdo, forçando assim ao usuário ter que criar um novo arquivo e copiar o conteúdo exibido no navegador para o novo arquivo.

Para evitar todo este transtorno poderia ser criada uma rotina para forçado o download do arquivo, facilitando assim a vida do usuário, para isso, existia pelo menos duas formas de resolver este problema, uma utilizando o PHP e outra o Apache, acabei optando pelo Apache pela sua simplicidade, não que com PHP não seja, é tão simples quanto o Apache.

Para isso foram utilizadas as seguintes diretivas:

<FilesMatch "\.(cgr|frx)$">
    ForceType application/octet-stream
    Header set Content-Disposition attachment
</FilesMatch>

Na primeira linha o “FilesMatch” ira fazer um filtro por um determinado arquivo ou um grupo de arquivos, o “FilesMatch” permite usar expressões regulares na especificação de arquivos o que acaba sendo equivalente a diretiva .

Já o “ForceType” estará setando e forçando um determinado tipo para o(s) arquivo(s) encontrados.

O “Header set” define o cabeçalho de resposta, substituindo qualquer cabeçalho anterior.

Com estas poucas linhas o problema foi resolvido, ao efetuar um novo teste o navegador abre a janela de “Salvar Como” permitindo que seja efetuado o download do arquivo.

Caso não esteja funcionando ou ocorrendo algum erro como “500 Internal Server Error”, certifique-se que esta linha esteja descomentada no arquivo http.conf.

LoadModule headers_module modules/mod_headers.so

No meu caso acabei incluindo estas configurações dentro do arquivo .htaccess ficando assim exclusivo para o projeto não interferindo em outro projetos, mas estas configurações podem ser colocadas diretamente no arquivo de configuração do Apache, http.conf.

Para configurar o Apache para trabalhar com .htaccess segue um pequeno tutorial no post anterior. Leia mais…

Abraço.

Leave a Reply

*

Current month ye@r day *