Download Corrompido "Failed - No File"

6 respostas
webhtml5php
T

OI pessoal ! Tenho uma aplicação Web construída com PHP 5 e webserver Apache 2.4. Criei um script que lê um diretório, pega todos os arquivos que estão nesse diretório e através deles cria links para download com o Atributo ´download´ do html 5. O problema é que quando o usuário clica nesses links o download vem corrompido acusando "Failed - No File ". As permissões de acesso do Sistema Operacional também estão OK (Uso Ubuntu Mate). Abaixo está meu código, usei Jquery e Dom também para criação dos elementos html.

function separarArquivos(){

// ABAIXO TEMOS A VARIAVEL JAVASCRIPT “arquivos” PARA GUARDAR A STRING DE CONSULTA EXTRAÍDA DO SERVER SIDE PHP, COM TODOS OS NOMES DE ARQUIVOS DO DIRETORIO

var arquivos = "<?php   $diretorio = './CLIENTES/';   $lendo = scandir($diretorio); $total =sizeof($lendo);     for($i=0; $i<$total; $i++){     print_r($lendo[$i]."-"); } ?>";
    
    $(document).ready(function(){                 
    var arraydeArquivos = arquivos.split("-"); // ARRAY PARA GUARDAR OS NOMES DOS ARQUIVOS CONSULTADOS COM PHP SEPARANDO-OS INDIVIDUALMENTE COM A FUNÇÃO 'split'.
   // LOOP ´FOR´ PARA CRIAR ELEMENTOS HTML "A" E "HREF" PARA CRIAÇAO DOS LINKS
        for(var cont=0; cont<arraydeArquivos.length ; cont++){
            var a = document.createElement("a");    // Cria elemento link para cadas arquivo
                var download = document.createAttribute("download");
                a.setAttributeNode(download);
                    var href = document.createAttribute("href");
                    href.value = "./CLIENTES/"+arraydeArquivos[cont];
                    a.setAttributeNode(href);
            a.innerHTML = arraydeArquivos[cont]+"<br>";              
        $("body").append(a);   // FIXA OS LINKS NA PÁGINA                      
        }     
    });     
  }

6 Respostas

peczenyj

Posta o href gerado.

Alias por que vc faz isso com js? Faz com php mesmo…

T

Oi peczenyj !! O Href é o caminho do arquivo “./CLIENTES/”+arraydeArquivos[cont] onde ./CLIENTES/ é um diretório e arradeArquivos[cont] é o índice do array onde foram extraídos os nomes dos arquivos que estão nesse diretório e scaneados do lado php, e assim armazenados na variável ‘arquivos’ Javascript. O código parece OK porq o download chega a ser feito o problema é que não vem nada, quando acaba o download aparece “Failed - No File”. Engraçado que testei esse mesmo código numa conexão Local e está Ok, mas externa não. Talvez o problema seja no Apache mas não encontrei nenhuma solução até agora.
Quanto a não fazer tudo com PHP , é porque a única forma de fazer download de um arquivo com PHP é através dos HTTP headers, e com essa técnica vc precisa especificar individualmente o MIME TYPE de cada arquivo que será baixado, e meu objetivo é o usuário fazer download de uma lista com vários arquivos à escolha deles de diversos tipos… txt, mp3, odt, pdf, etc. Por isso optei por um script que lesse todos os arquivos do diretório do meu Web Server e criasse os links HTML para download no lado cliente .:+1:

peczenyj

amigão, mostra qual valor vc estaria enfiando no href.

T

Ok !
"./CLIENTES/historiasCarochinha.txt" . Lembrando que historiasCarochinha.txt vai variar pois são diversos arquivos no diretório e não somente um.

peczenyj

certo. e quando o cara clica, isso realmente vai pro caminho que o historiasCarochinha.txt está?

não tem um diretorio a mais ou a menos?

T

Nao, nao.

Criado 6 de dezembro de 2016
Ultima resposta 7 de dez. de 2016
Respostas 6
Participantes 2