Download file by mobile device

9

I have a link, and clicking that link will download an image. So far so good, but when I access from some mobile device I can not download this file, does anyone have an idea or solution to solve this?

HTML:

<a href="http://mlb-s2-p.mlstatic.com/ipad-mini-apple-16gb-wi-fi-100-original-pronta-entrega-16713-MLB20125338106_072014-F.jpg" download>
    Clique para baixar a imagem
</a>

JSFIDDLE:

link

    
asked by anonymous 19.11.2015 / 13:25

2 answers

2

You can try this, but it does not support all browsers:

<a href="/caminho/imagem" download="arquivo-para-baixar.jpg" title="Nome da imagem">
    <img src="/caminho/imagem/arquivo-para-ver.jpg" alt="Nome da imagem">
</a>

Usage example

See what is supported here: link .

But you can try using modernizr to do this: link

Another way and creating an .htaccess with the following rule:

<Files (arquivo1|arquivo2).jpg>
   ForceType application/octet-stream
   Header set Content-Disposition attachment
</Files>

Fiddle Model

    
25.11.2015 / 17:38
1

Danilo, there is no way to do this consistently on the client side. You would have to use a server solution to ensure the download happens.

See a well-publicized PHP example:

  • Your image on the front-end (client side):
  • <a href="download.php?imagem=caminho/absoluto/da/imagem.jpg">
        <img src="caminho/absoluto/da/imagem.jpg"/>
    </a>
  • On the server side:
  • <?php
    
    $imagem = $_GET['imagem']; #pega o caminho absoluto da imagem a partir do link
    
    baixar_imagem($imagem); #executa a funcao abaixo que tem o caminho absoluto da imagem como parametro
    
    function baixar_imagem( $camingo_absoluto_da_imagem ){
    
      // Verifica se os cabeçalhos da pagina de download foram enviados
      if( headers_sent() ){
          die('Cabeçalhos de página já enviados!');
      }
        
    
      // Essa parte é requerida em alguns navegadores
      if(ini_get('zlib.output_compression')){
          ini_set('zlib.output_compression', 'Off');
      }
        
    
      // Primeiro, verificamos se a imagem existe
      if( file_exists($camingo_absoluto_da_imagem) ){
    
        // Depois, verificamos a extensao da imagem para podermos saber seu tipo MIME
        $tamanho_da_imagem = filesize($camingo_absoluto_da_imagem);
        $trecho_caminho_imagem = pathinfo($camingo_absoluto_da_imagem); //veja mais sobre a função pathinfo() do PHP
        $extensao = strtolower($trecho_caminho_imagem["extension"]);
    
        // Agora, verificamos o tipo da imagem a partir da extensao
        switch ($extensao) {
          case "gif": $tipo_imagem="image/gif"; break;
          case "png": $tipo_imagem="image/png"; break;
          case "jpeg": $tipo_imagem="image/jpg"; break;
          case "jpg": $tipo_imagem="image/jpg"; break;
          default: die('Imagem não foi encontrada');
        }
    
        header("Pragma: public"); // requerido
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Cache-Control: private",false); // requerido em certos navegadores
        header("Content-Type: $tipo_imagem");
        header("Content-Disposition: attachment; filename=\"".basename($camingo_absoluto_da_imagem)."\";" );
        header("Content-Transfer-Encoding: binary");
        header("Content-Length: ".$tamanho_da_imagem);
        ob_clean();
        flush();
        readfile( $camingo_absoluto_da_imagem );
    
      } else{
          die('Imagem não foi encontrada');
      }
        
    
    }

    Information:

  • PHP functions used:

  • 02.12.2015 / 07:14