Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

miqueiasrafael

[ Download de PDF ] por ID dinamicamente

Recommended Posts

Senhores, estou tendo dificuldades pra fazer o download de arquivos PDF cadastrados no banco dinamicamente por ID segue o código

 

$sql = "SELECT prod_pdf FROM form_produtos WHERE prod_id = 'id'";
$res = mysql_query($sql) or die('Erro ao selecionar arquivo: ' . mysql_error());
$conta = mysql_num_rows($res);

if ($conta == 1) {
$dados = mysql_fetch_object($res);

header("Content-disposition: attachment; filename=_Ficha-Tecnica.pdf"); //Nome do arquivo pdf
header("Content-type: application/pdf;"); //header("Content-type: application/pdf");
readfile("../../public/_metaDadosProdutos/_pdf-s/'. $conta->prod_id .'"); // Data download
} else {
echo '<script> alert("Arquivo não encontrado!");</script>';
}

 

alguém pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse code é em php, este fórum é somente para ASP. Por favor poste no fórum de php.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Blz amigo, mas não tem problema se fosse em ASP pra min, queria pelo menos a estrutura do código. pois se fosse o caso migraria para PHP pois a aplicação que estou fazendo é em PHP e o servidor cliente também...

Compartilhar este post


Link para o post
Compartilhar em outros sites

use assim para fazer o download:

 

<%
'É necessário passar o nome do arquivo no FORM
Dim Arquivo
Arquivo = Request("arquivo")

Response.Buffer = True
Response.AddHeader "Content-Type","application/x-msdownload"
Response.AddHeader "Content-Disposition","attachment; filename=" & Arquivo
Response.Flush

Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 1
objStream.LoadFromFile Server.MapPath(Arquivo)
Response.BinaryWrite objStream.Read
objStream.Close
Set objStream = Nothing
Response.Flush
%>

usando este Content-Type para forçar o download, apenes mude o arquivo para o recordset da sua SQL= "SELECT prod_pdf FROM form_produtos WHERE prod_id = 'id'" e pronto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo não funcionou não olha aí a mensagem que o adobe gerou, sendo que se eu abrir o mesmo arquivo sem passar pela aplicação ele abre normalmente, mostrando assim que tá tudo certo com o programa e o arquivo.

 

Mas enfim o código que tá com erro mesmo!

 

olha aí a mensagem:

 

"O Adobe reader não pode abrir o 'arquivo_teste.pdf' porque não há suporte a esse tipo de arquivo ou ele foi danificado ( por exemplo, foi enviado como anexo de e-mail e não foi decodificado corretamente)."

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual o código do erro gerado ?

e tente um outro arquivo qualquer, para ver, pois este code funciona. e certifique-se do path estar correto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Miqueiais tente desta forma...

 

mas o arquivo da página asp precisa estar na mesma pasta onde os arquivos pdfs estão ... senão mude desta linha

 

oStream.LoadFromFile(server.mappath(pasta))

 

para:

 

oStream.LoadFromFile(pasta)

 

mas precisa passar o caminho físico completo donde o arquivo está...

 

 

a função é semelhante a já postada só o cabeçalho está diferente... mas a idéia é essa mesmo...

 

Sucesso!!

 

 

function baixar(file)
clChunkSize = 104857698
Response.Buffer = false
Response.ContentType = "application/octet-stream"
Response.AddHeader "Content-Disposition", "attachment; Filename="&file
set oStream = Server.CreateObject("ADODB.Stream")
oStream.Type = 1
oStream.Open()
oStream.LoadFromFile(server.mappath(file))
Response.AddHeader "Content-Length", oStream.Size
length = int (oStream.Size / clChunkSize)
x= int (cdbl(clChunkSize) /cdbl(oStream.Size) )
if cdbl(oStream.Size)<cdbl(clChunkSize) then
Response.BinaryWrite oStream.Read(oStream.Size)
else
for i = 0 to length
Response.BinaryWrite oStream.Read(clChunkSize)
next
end if
oStream.Close()
end function

 

att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem um sisteminha de download que coloquei no fórum, ele é mais completo, podendo optar por configurar as pastas e tudo mais, pode te ajudar e dar novas ideias, dá uma procurada no fórum, pode ajudar também.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já estou fazendo isso galera! O problema em questão é o servidor que é PHP, mas estou estudando a possibilidade de adaptação do ASP para PHP, até porque aplicação é em PHP. Mesmo assim obrigado a todos

Compartilhar este post


Link para o post
Compartilhar em outros sites

servidor sendo linux, vc pode usar o ChiliASP

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aí galera segue a solução:

 

 

<?php

include '../config.php';

/*
 *                 EMAIL : rafaelh3r@yahoo.com.br
 *                 FONE : 55+(91)8389-9330 / 88235532
 *      COPYRIGHT : © 2013 GRUPOSTONE
 */

$prod_id = $_GET['id'];

$sql = "SELECT prod_pdf FROM form_produtos WHERE prod_id = '$prod_id'";
$res = mysql_query($sql) or die('Erro ao selecionar arquivo: ' . mysql_error());

$conta = mysql_num_rows($res);

if ($conta == 1) {
    $dados = mysql_fetch_object($res);

// Caminho dos arquivos PDF
    $arquivo = "../../_pdf-s/" . $dados->prod_pdf . "";

    if (!file_exists($arquivo)) {
        die("Arquivo " . $arquivo . " não encontrado!");
    }
    header("Content-type: application/pdf");

    // Nome do arquivo PDF
    header("Content-Disposition: attachment; filename=\"_Ficha-Tecnica.pdf\"");
    readfile($arquivo);
} else {
    echo '<script> alert("Arquivo não encontrado ou não existe!");</script>';
}
?>

:seta: O link que chama a função dentro de um 'WHILE' especificamente por ID

 

 

 <p><a href="../../_produtos_descricao_pdf.php?id=<?= $stonelist->prod_id ?>" target="_blank">PDF</a></p>

Obrigado a todos galera!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

legal... poste também no fórum de php.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.