Lançado Adianti Framework 8.1!
Clique aqui para saber mais
Download de arquivos Ola, Estou tendo dificuldades para fazer o download de arquivos zip dentro de uma pequena aplicação com o Adianti Framework. O arquivo que devo fazer o download é algo como: cotacoes/1.zip. O problema que esta acontecendo é que o arquivo aparece na tela, e nao eh realizado o download. Segue a rotina que estou usando: if (file_exists($zip_file)) { header("Pr...
MF
Download de arquivos  
Fechado
Ola,

Estou tendo dificuldades para fazer o download de arquivos zip dentro de uma pequena aplicação com o Adianti Framework.

O arquivo que devo fazer o download é algo como: cotacoes/1.zip.

O problema que esta acontecendo é que o arquivo aparece na tela, e nao eh realizado o download.

Segue a rotina que estou usando:

if (file_exists($zip_file)) {
header("Pragma: public");
header("Expires: 0"); // set expiration time
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
// browser must download file from server instead of cache
// force download dialog
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream", FALSE);
header("Content-Type: application/download", FALSE);
header("Content-Disposition: attachment; filename=".basename($zip_file));
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($zip_file));
readfile($zip_file);
readfile.exit();
} else {
new TMessage('info', "Arquivo com cotações não localizado em nosso servidor.");
exit();
}

}

Quando uso a mesma rotina de download num arquivo php fora do Framework, o download é realizado com sucesso.

Quando tento fazer o download dentro da aplicação, o arquivo é visualizado na tela e não é feito o download. Preciso fazer o download.

Ja li alguns posts sobre download e upload aqui no forum, inclusive ate uma sugestao de modificação no arquivo nativo download.php no raiz do framework.

Alguem teria alguma sugestao?

Obrigado.

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (7)


JF

Marcelo, acho que seu problema é o nome do arquivo, já que '/' é um caractere inválido. Experimente trocá-lo por um '_', por exemplo!
MF

João,

Obrigado por sua resposta, mas na verdade esse não é o problema. O nome do arquivo é apenas 1.zip, dentro da pasta cotacoes/ . Assim antes de passar o parametro o nome completo junto o path + nome do arquivo => cotacoes / 1.zip

A aplicação está encontrando o arquivo corretamente, ou seja, não apresenta nenhum erro quanto a nome inválido ou arquivo não encontrado.

A questão é que o arquivo, ao inves de ser baixado diretamente pelo browser (download do arquivo) está sendo visualizado na tela, ou seja, seu conteudo é mostrado na tela.

De qualquer forma, obrigado pela força.
FC

Aqui uso assim:

TPage::openFile('app/output/1.zip');
JF

Entendi!!!
O seu problema é o browse. Se for o Firefox, vá No menu Opções / Aplicativos, na lista que abre procure pela extensão ZIP (geralmente há um aplicativo associado, tipo WinRAR archive) e troque a AÇÃO para perguntar ou Download. Nos outros browsers a solução é semelhante.
MF

Felipe Cortez, obrigado por sua dica. Ela me ajudou na solução do problema. De fato, agora ja esta fazendo o download do arquivo zip da forma como eu preciso.

Porem, se eu uso só o readFile ele nao baixa o arquivo e so mostra na tela (so caracteres malucos, porque o arquivo é zipado).
Se eu uso so o openFile ele nao faz nada, nem baixa o arquivo nem mostra na tela.
Se eu uso o openFile seguido do readFile ele faz os dois, ou seja, faz o download corretamente e depois visualiza na tela (lembrando que eu nao quero mostrar na tela, so fazer o download).

Entao, agora tá assim, ta funcionando porque tá fazendo o download corretamente, porem, ta mostrando na tela um monte de sujeira tambem.

Joao Leonel Ferreira, obrigado por sua dica, tambem me ajudou a entender melhor o problema.

Obrigado a todos.


Abaixo, deixo o codigo ai pra quem quiser dar uma olhada. Ta funcionando...

public function onBaixar( $param )
{
$zip_file = $param['id'] . '.zip';
$path = 'cotacoes/';

if (file_exists($path . $zip_file))
{
header("Pragma: public");
header("Expires: 0"); // set expiration time
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=".basename($path . $zip_file));
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($path . $zip_file));
ob_end_clean();
flush();
TPage::openFile($path . $zip_file);
readfile($path . $zip_file);

} else
{
new TMessage('info', "Arquivo com cotações não localizado em nosso servidor.");
}
}


PD

Pessoal,

Usem do jeito mais fácil, please:
  1. <?php
  2. TPage::openFile('app/output/1.zip');
  3. ?>


Não é necessário um monte de código ;-)

Só habilitem a extensão ZIP no download.php, que por default é desabilitada.

Att,
FS

Mais chamaria este código TPage::openFile('app/output/1.zip'); por uma função?