PDA

View Full Version : download pdf da database


viracocha50
18-12-2011, 02:09
Salve,
ho un problema, se qualcuno può aiutarmi..

con script PHP ho caricato su db MySql un file pdf in un campo mediumblob.
Fin qui nessun problema.
I guai cominciano quando voglio scaricare tramite download o visualizzare direttamente
nel browse il file pdf.
ho provato con due script, il primo per visualizzare il file direttamente in chrome

<?php
include("../Connections/connSLV.php");// connCDC.php contiene i dati per la connessione col database
$sql = @mysql_query("SELECT societa FROM Documenti WHERE id_doc = 1");
$doc = mysql_fetch_row($sql);
header('Content-type: application/pdf');
echo $doc;
?>

il risultato è una pagina grigia con la scritta: < Caricamento del documento PDF non riuscita >


il secondo per fare download

<?php
include("../Connections/connSLV.php");// connCDC.php contiene i dati per la connessione col database
$nome_file = "societa.pdf";
$sql = @mysql_query("SELECT societa FROM Documenti WHERE id_doc = 1");
$doc = mysql_fetch_row($sql);
header('Content-type: application/pdf');
header("Content-Disposition: attachment; filename=$nome_file");
echo $doc;
?>

il risultato è il download del file societa.pdf che però aprendolo con Acrobat mi da il seguente messaggio:

<< Acrobat non è in grado di aprire 'societa.pdf' perchè è un tipo di file non
supportato oppure perchè il file è stato danneggiato (ad esempio è stato inviato
in allegato a un messaggio e-mail e non è stato decodificato correttamente).

Per creare un documento Adobe PDF, tornare all'applicazione di origine e
stampare il documento in Adobe PDF. >>

Qualcuno sa darmi un suggerimento?
grazie
Max

starfred
18-12-2011, 11:10
Premetto che non conoscendo il contesto del problema non so se il mio suggerimento sia utile, tuttavia invece di memorizzare un file dentro il DB (che lo fa solo appesantire) non memorizzi un link al file?

newuser
18-12-2011, 16:04
Confronta il file binario PDF originale che hai caricato nel DBMS con quello che ottieni scaricandolo con il browser. Se hai lunghezze di file differenti è possibile che l'encoding usato nel trasferimento non sia quello corretto.

E' possibile che oltre a dover settare il content type nel trasferimento HTTP occorra anche impostare l'encoding per permettere al browser di ricostruire la sequenza di byte corretta.

viracocha50
18-12-2011, 18:11
Premetto che non conoscendo il contesto del problema non so se il mio suggerimento sia utile, tuttavia invece di memorizzare un file dentro il DB (che lo fa solo appesantire) non memorizzi un link al file?

Grazie, lo so che il modo migliore e quello da te indicato; il fatto è che purtroppo colui che
dovrà caricare i pdf non sono io, ma un addetto agli aggiornamenti, come esterno, senza dover accedere ai contenuti del sito, ma tramite un accesso login alla gestione database.



Confronta il file binario PDF originale che hai caricato nel DBMS con quello che ottieni scaricandolo con il browser. Se hai lunghezze di file differenti è possibile che l'encoding usato nel trasferimento non sia quello corretto.

E' possibile che oltre a dover settare il content type nel trasferimento HTTP occorra anche impostare l'encoding per permettere al browser di ricostruire la sequenza di byte corretta.

Infatti, era il mio sospetto poichè da 150KB di file originale, mi ritorna con il download di 2KB.
Però sinceramente non so come settare l'encoding. Hai qualche suggrimento o qualche link a cui andare?
Grazie per le risposte
Max