Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Download de Arquivo Pessoal, Estou precisando criar um link em um datagrid para fazer download de um arquivo que esta em uma pasta ex: tmp/ cheguei até a parte do botão e chamar uma função, porém na função não estou conseguindo definir este código. Alguém já passou por isso, e possa me ajudar?...
FS
Download de Arquivo  
Pessoal,

Estou precisando criar um link em um datagrid para fazer download de um arquivo que esta em uma pasta ex: tmp/
cheguei até a parte do botão e chamar uma função, porém na função não estou conseguindo
definir este código. Alguém já passou por isso, e possa me ajudar?

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (15)


MG

Este post pode te ajudar:

https://www.adianti.com.br/forum/pt/view_599?exemplo-de-upload-e-download-de-arq
FS

Desculpe, mais este link que me passou, tem somente informações de fazer o upload do arquivo e definir uma pasta isso meu código já esta
fazendo porém eu preciso colocar um botão no datagrid para fazer o download do mesmo.
MG

Fernando
Você chegou a ler a mensagem abaixo:



João Renato Nunes: ( 2015-11-07)
E para fazer o download ao invés de mostrar o conteúdo na tela, que no meu caso tem que ser assim, alterei o download.php na raiz do framework na linha 27.


Se for no stackoverflow, encontrará o seguinte pergunta e resposta. Lembrando que o Adianti é um fw em PHP.

https://pt.stackoverflow.com/questions/114254/download-de-arquivos-em-php
FS

Sim, fiz esta alteração também, mais nada adiantou.
MG

Posta o código para que possamos analisar.
FS

// create DOWNLOAD action
$action_download = new TDataGridAction(array($this, 'onDownload'));
//$action_edit->setUseButton(TRUE);
$action_download->setButtonClass('btn btn-default');
$action_download->setLabel(_t('Download'));
$action_download->setImage('fas:cloud-download-alt green');
$action_download->setField('arquivo');
$this->datagrid->addAction($action_download);



public function onDownload($param)
{
$zip_file = $param['arquivo'];
$path = 'files/';

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.");
}
}
FS

Quando estou clicando no botão ele abre o conteúdo do arquivo na tela e abre outra aba no navegador
com o seguinte endereço: /download.php?file=files/3273-EG327300000420200717.CNV&basename=
MG

Qual a extensão dos arquivos?
FS

*.CNV
FS

no banco de dados estou salvando o nome do arquivo e também uma outro coluna com o caminho do arquivo e nome por exemplo:
files/3273-EG327300000420200717.CNV
MG

Então no download.php existe uma lista de extensões, eu acho que você precisa adicionar esta extensão lá!
Você já fez isso?
FS

Eu tinha feito isso, porém acho que o código antes estava errado e não tinha funcionado,
mais agora deu certo, funcionou muito obrigado mais uma vez.
MG

Beleza. Sucesso!
FS

Outra coisa, resumi o código ficando somente assim:

public function onDownload($param)
{
$zip_file = $param['caminho'];
TPage::openFile($zip_file);

}
MG

Exatamente.
O FW foi construído para abstrair as complexidades.
O download.php veio para ajudar nessa parte.
Como você comentou que não conseguia, como FW é aberto e em PHO fica aberto para usar os recursos da linguagem em casos mais complexos.

Quem bom que deu certo,