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?
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?
Este post pode te ajudar:
https://www.adianti.com.br/forum/pt/view_599?exemplo-de-upload-e-download-de-arq
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.
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
Sim, fiz esta alteração também, mais nada adiantou.
Posta o código para que possamos analisar.
// 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.");
}
}
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=
Qual a extensão dos arquivos?
*.CNV
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
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?
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.
Beleza. Sucesso!
Outra coisa, resumi o código ficando somente assim:
public function onDownload($param)
{
$zip_file = $param['caminho'];
TPage::openFile($zip_file);
}
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,