Oferta Nacional - 234x60

Arquivo

Textos com Etiquetas ‘download’

Como criar um link simbólico no ubuntu linux

Ontem eu tive a necessidade de criar um link simbólico, de forma a disponibilizar o download de um arquivo dentro de uma pasta na raíz do servidor linux.

Para ser mais específico, eu precisei disponibilizar o download do backup do banco de dados, via http, para usuários que não têm acesso ssh e ftp ao servidor, mas que precisam da ultima versão do backup do banco de dados. Porém, o backup fica armazenado em uma pasta dentro da raíz do servidor, de forma que não seria muito prático apenas colocar o backup do banco dentro de uma pasta real que possibilitasse o download direto via http.

A solução foi criar um link simbólico, para que quando os usuários solicitassem o acesso ao arquivo via http, fosse disponibilizado o download do arquivo original, na pasta original.

Vamos à prática.

Supondo que você tenha um arquivo, tipo, no meu caso, backupbd.sql.gz, na pasta /home/backups/, e você quer disponibilizar o download via http, através de um link http://www.exemplo.com.br/backup/backupdb.sql.gz, desse mesmo arquivo.

Se a pasta raíz do seu site se localiza em /home/exemplo ( http://www.exemplo.com.br aponta para /home/exemplo ), você vai criar a pasta backup dentro desse diretório.

$ cd /home/exemplo
home/exemplo$ mkdir backup
home/exemplo$ cd backup
home/exemplo/backups$ ln -s /home/backups/backupbd.sql.gz backupdb.sql.gz

Pronto, você fez um link simbólico, onde se os usuários acessarem http://www.exemplo.com.br/backup/backupdb.sql.gz, será disponibilizado o download do arquivo backupbd.sql.gz localizado em /home/backups/.

Para criar um link simbólico de uma pasta, você usa a mesma lógica.

No próximo post, vou mostrar, ainda em cima deste exemplo, como proteger o download do arquivo via http, solicitando uma senha, através do .htaccess e .htpasswd.

Posts Relacionados:

Forçar download em servidor remoto como Amazon S3 com opção “salvar como”

Olá!

Este artigo mostra como fazer para que apareça a opção “salvar como” para downloads de arquivos hospedados em servidores remotos, o que é muito útil para se poupar recursos do servidor.

Para poder utilizar a solução apresentada aqui, será necessário que o Apache esteja com os módulos mod_rewrite e mod_proxy habilitados, ou que você possa editar o arquivo httpd.conf do servidor Apache (ou solicitar as configurações ao seu serviço de hospedagem).

Há um certo tempo atrás a equipe do meuInglês decidiu hospedar os arquivos pesados do site, como FLV e MP3, e as imagens, nos servidores Amazon S3. As vantagens eram muitas, tais como a rapidez no carregamento dos arquivos, o baixo custo e a segurança envolvidos. Tudo era maravilhoso, até que esbarrei com as opções de download que o meuInglês oferece aos seus usuários. Outros sites concorrentes também hospedam seus arquivos na Amazon S3, e a opção de download para seus usuários é de clicar com o botão direito do mouse para selecionar salvar o destino do link (pelo menos com instrução, para facilitar a vida de usuários menos experientes).

Particularmente, acho esta solução muito deselegante, pois é tão cômodo para o usuário simplesmente clicar no botão de download e aparecer uma janelinha pedindo para “Salvar o arquivo como…”. Comecei a googlar pesquisando uma solução.

A primeira coisa que fiz foi usar a função fopen() do php com permissão a acessar arquivos remotos, e depois setar o header do php para disponibilizar o arquivo como attachment. Logo vi em conjunto com a equipe de tecnologia que isso não seria uma solução, mas sim um problema, pois a função fopen() baixava os arquivos da Amazon S3 para o servidor, e depois disponibilizava o arquivo para o usuário, logo, iríamos pagar os custos de tranferência de dados duas vezes: uma pela transferência dos arquivos da Amazon S3 para o servidor, e depois do servidor para o usuário, além do tempo de download ser a soma desses dois downloads.

Perdi três preciosos dias buscando uma solução, pesquisando, pensando, tentando várias coisas que encontrei, tais como setar cabeçalhos (HTTP Header) diretamente nos arquivos, ou ao subir os arquivos para a Amazon S3… Estava quase desistindo, quando encontrei um site maravilhoso com ótimas dicas de configurações do Apache e do .htdocs (salve nos seus favoritos! Você vai precisar!).

Então saí da câmara escura e comecei a enxergar novos horizontes.

Criei uma pasta downloads na raíz do site e dentro dela coloquei um arquivo .htacces com a seguinte configuração:


IndexIgnore *
RewriteEngine On

RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^mp3/(.*)$ http://seubucket.s3.amazonaws.com/pasta/$1?%1 [P,E=PERMITE:1]

RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^pdf/(.*)$ http://seubucket.s3.amazonaws.com/pasta/$1?%1 [P,E=PERMITE:1]

RewriteCond %{ENV:PERMITE} !1$ [NC]
RewriteRule .* - [R=404,NS,L]

Header set Content-Disposition "attachment;" env=PERMITE

Explicando:

  1. A primeira linha simplesmente não permite listar os arquivos do diretório.
  2. A segunda linha habilita o módulo rewrite do apache.
  3. A quarta linha (assim como a sexta) pega os parâmetros passados pela url (como a autenticação para arquivos protegidos na Amazon S3) através de uma condição Rewrite e coloca no lugar de %1 na linha seguinte.
  4. A quinta linha (assim como a sétima) faz o rewrite, ou seja, reescreve a url recebida para a url original. A mágica acontece ao setar a flag P, que diz que a url será acessada via mod_proxy do Apache. Nesta linha também é setada uma variável PERMITE, que terá o valor 1 se a condição RewriteRule for satisfeita.
  5. Na décima linha, verifico se a varíavel PERMITE possui valor diferente de 1, através de uma condição Rewrite, e, se for o caso, apresento uma página de erro 404, e ecerro a execução do código (flag L).
  6. Finalmente, na linha 13, se o código chegar até lá (ou seja, pelo menos uma das duas condições foi satisfeita => PERMITE = 1), defino o cabeçalho do conteúdo como attachment, ou seja, para download, e então aparece aquela janelinha linda de “Salvar arquivo como…”

Desta forma, para fazer download do arquivo com a opção “Salvar como”, basta que a url do botão/link de download seja no formato


http://www.exemplo.com.br/downloads/mp3/nomedoarquivo.mp3?par=XXX&par=YYY ou

http://www.exemplo.com.br/downloads/pdf/nomedoarquivo.pdf?par=XXX&par=YYY

(os parâmetros são opcionais dependendo do que você estiver fazendo)

Se o arquivo


http://seubucket.s3.amazonaws.com/pasta/nomedoarquivo.pdf?par=XXX&par=YYY

existir aparecerá a janela de download, caso contrário, será exibido um erro 404.

Enfim, como disse no começo, para isso funcionar, o servidor Apache deve estar com os módulos mod_rewrite e mod_poxy, e mod_proxy_http habilitados. Para isso, certifique-se de que as seguintes linhas do httpd.conf estejam descomentadas:


LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule rewrite_module modules/mod_rewrite.so

Eu usei Apache 2.2.X e não testei em outras versões.

Espero que este artigo tenha sido útil para você, e, se era isso o que você estava procurando, fico feliz se você encontrou a solução em menos de 3 dias! ;)

Até a proxima!

Related Posts Plugin for WordPress, Blogger...

Posts Relacionados:

SEO Powered by Platinum SEO from Techblissonline