Documento(Nome do Arquivo) - Abrir no navegador[RESOLVIDO]

Pessoal fiz um formulário contendo o campo “Documento(Nome do Arquivo)”, consegui fazer o upload do arquivo, mas quando eu faço uma grid(consulta) destes, ao clicar no link ele vai para baixar, eu queria que abrisse no navegador, alguém pode me ajudar com uma solução ou um paleativo.

Grato!

Então, eu fiz algo parecido, só que ficou meio um “Ajuste Tecnico” mas funcionou rsrs

Criei uma tela intermediaria entre o Grid e o navegador, uma aplicação blank que continha apenas o ID do registro, fazia uma busca no banco de dados e jogava na tela.
Da uma olhada no codigo que fica no onExecute da aplicação blank:

$id = [VAR_NOT]; //VARIAVEL COM ID

//FAZ O LOOKUP E TRAZ O ARQUIVO EM BINARIO
$sql = “SELECT ANEXO_FILE FROM arquivos WHERE ID=”.$id;
sc_lookup(rs,$sql);

//SETA HEADER QUE O ARQUIVO É PDF
header(‘Content-Type: application/pdf’);

//PRINTA NA TELA
print ({rs[0][0]});

Tentei utilizar, mas não deu certo, fiz umas modificações para me adequar, mas algo está errado, pois ele abre dizendo “Falha ao Carregar pdf”, lembrando que não guardo o arquivo no banco, só o nome, eu guardo dentro da pasta os documentos.

$id = [VAR_NOT]; //VARIAVEL COM ID

//VARIÁVEL $caminho tem lugar onde guarda os arquivos
$caminho = $this->Ini->path_doc;

//FAZ O LOOKUP E TRAZ O ARQUIVO EM BINARIO
$sql = “SELECT nome_arquivo FROM documento WHERE id=”.$id;
sc_lookup(rs,$sql);

//SETA HEADER QUE O ARQUIVO É PDF
header(‘Content-Type: application/pdf’);

//LOCALIZA O NOME DO ARQUIVO NO BANCO
$arquivo = ({rs[0][0]});

$completo = $caminho."/".$arquivo;

echo $completo;

Printa o Binario do arquivo que o navegador vai entender por causa do header:

$id = [VAR_NOT]; //VARIAVEL COM ID

//VARIÁVEL $caminho tem lugar onde guarda os arquivos
$caminho = $this->Ini->path_doc;

//FAZ O LOOKUP E TRAZ O ARQUIVO EM BINARIO
$sql = “SELECT nome_arquivo FROM documento WHERE id=”.$id;
sc_lookup(rs,$sql);

//SETA HEADER QUE O ARQUIVO É PDF
header(‘Content-Type: application/pdf’);

//LOCALIZA O NOME DO ARQUIVO NO BANCO
$arquivo = ({rs[0][0]});

$completo = $caminho."/".$arquivo;

//PEGA O BINARIO

$fp = fopen($completo, ‘rb’);
$content = fread($fp, filesize($completo));

print($content);

PEREFEITO!!!
Valew cara o código ficou show de bola!

Nycollas,

Estou querendo melhorar o script, estava tentando fazer que este script abra video mp3 por exemplo, tentei colocar um if para o header, mas não deu certo, nem sei se posso fazer isto, tem uma idéia?

$id = [VAR_NOT]; //VARIAVEL COM ID

//VARIÁVEL $caminho tem lugar onde guarda os arquivos
$caminho = $this->Ini->path_doc;

//FAZ O LOOKUP E TRAZ O ARQUIVO EM BINARIO
$sql = “SELECT nome_arquivo FROM documento WHERE id=”.$id;
sc_lookup(rs,$sql);

//LOCALIZA O NOME DO ARQUIVO NO BANCO
$arquivo_nome = ({rs[0][0]});
$arquivo = $arquivo_nome;

//PEGA O 4 ÚLTIMOS DÍGITOS DO NOME DO ARQUIVO PARA IDENTIFICAR EXTENSSÃO
$pdf = “.pdf”;

$arquivo = $_FILES[‘arquivo’];

$final = $arquivo;
$final = substr($final,(strlen($final)-4),strlen($final));

if($final = $pdf)
{
header(‘Content-Type: application/pdf’);
}

$completo = $caminho."/".$arquivo_nome;

//PEGA O BINARIO

$fp = fopen($completo, ‘rb’);
$content = fread($fp, filesize($completo));

print($content);

//VARIÁVEL $caminho tem lugar onde guarda os arquivos
$caminho = $this->Ini->path_doc;

//FAZ O LOOKUP E TRAZ O ARQUIVO EM BINARIO
$sql = “SELECT nome_arquivo FROM documento WHERE id=”.$id;
sc_lookup(rs,$sql);

//SETA HEADER QUE O ARQUIVO É PDF
header(‘Content-Type: application/pdf’);

//LOCALIZA O NOME DO ARQUIVO NO BANCO
$arquivo = ({rs[0][0]});

$completo = $caminho."/".$arquivo;

//PEGA O BINARIO

$fp = fopen($completo, ‘rb’);
$content = fread($fp, filesize($completo));

print($content);

Eu tenho uma ideia de como forçar o download, não sei se consegueria fazer ele reproduzir, serveria para você?

Me passa a idéia que posso tentar adaptar

Dei uma estudada ontem e consegui reproduzir um video MP4, só não consegui reproduzir o audio MP3


<?php

$arquivo = "teste.mp4"; //VIDEO
//$arquivo = "teste.mp3"; //AUDIO
//$arquivo = "teste.pdf"; // PDF
//$arquivo = "teste.xls"; //ARQUIVO QUALQUER QUE NAO REPRODUZ


$completo = $arquivo; // CAMINHO COMPLETO

//TIRA O NOME FINAL DO ARQUIVO
$final = substr($arquivo,(strlen($arquivo)-4),strlen($arquivo));



if($final == ".pdf"){
   
    //É UM PDF
    header('Content-Type: application/pdf');

    //PEGA O BINARIO

    $fp      = fopen($completo, 'rb');
    $content = fread($fp, filesize($completo));

    print($content);

   
}else if($final == ".mp3"){

     // É UM MP3
     header('Content-Type: audio/mp3');
     header("Content-Disposition: attachment; filename='".$completo."'");
     header('Content-length: ' . filesize($completo));

      //PEGA O BINARIO

    $fp      = fopen($completo, 'rb');
    $content = fread($fp, filesize($completo));

    print($content);

  
 
}else if($final == ".mp4"){

     // É UM MP4
     header('Content-Type: video/mp4');
     //header("Content-Disposition: attachment; filename='".$completo."'"); //ESSE FORÇA DOWNLOAD, POR CAUSA DO attachment
     header("Content-Disposition: filename='".$completo."'"); //  ESSE FAZ O VIDEO RODAR NO NAVEGADOR SE POSSIVEL
     header('Content-length: ' . filesize($completo));
   
     
    //PEGA O BINARIO

    $fp      = fopen($completo, 'rb');
    $content = fread($fp, filesize($completo));

    print($content);

 
}else{

  //Extensão não compativel
  echo("Nao e Possivel Reproduzir o Arquivo");


}



?>

Sobre esta questão do áudio consegui resolver mudando o
“header(‘Content-Type: audio/mpeg’);” // Para MP3
“header(‘Content-Type: audio/ogg’);” // Para ogg
“header(‘Content-Type: audio/wav’);” // Para wav

Acho que conseguimos fechar a solução!!! Você é o cara…

A função:

$id = [VAR_NOT]; //VARIAVEL COM ID

//VARIÁVEL $caminho tem lugar onde guarda os arquivos
$caminho = $this->Ini->path_doc;

//FAZ O LOOKUP E TRAZ O ARQUIVO EM BINARIO
$sql = “SELECT nome_arquivo FROM documento WHERE id=”.$id;
sc_lookup(rs,$sql);

//SETA HEADER QUE O ARQUIVO É PDF
header(‘Content-Type: application/pdf’);

//LOCALIZA O NOME DO ARQUIVO NO BANCO
$arquivo = ({rs[0][0]});

$completo = $caminho."/".$arquivo;

//PEGA O BINARIO

$fp = fopen($completo, ‘rb’);
$content = fread($fp, filesize($completo));

print($content);

funcionou perfetamente.

O Problema e quando o PDF e grande ou tem muitas paginas, o navegador não consegue carregar…