Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Upload e download di un file da un database postgresql

    Buongiono a tutti, è la prima volta che scrivo in questo forum (finora mi sono sempre bastate le utilissime guide di html.it) ma ho un problema che non riesco a risolvere e la documentazione php non mi chiarisce cosa fare:

    Devo sostanzialmente creare una pagina php dove sia possibile caricare un file pdf in un database postgresql e un altra pagina dove sia possibile scaricare lo stesso file.

    La tabella postgres è così definita

    codice:
    CREATE TABLE salute.prova2
    (
      id serial NOT NULL,
      a bytea,
      CONSTRAINT prova2_pkey PRIMARY KEY (id)
    e la pagina dove è possibile fare l'upload è questa:

    codice:
    <form method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
    File to upload/store in database:<br>
    <input type="file" name="form_data" size="40">
    <input type="hidden" name="task" value ="uplImg"/>
    <input type="hidden" name="task" value ="fileUpload"/>
    <p><input type="submit" name="submit" value="submit">
    </form>
    
    
    
    
    <?php
    	if ($_POST[submit]=="submit"){
    		include_once('../funzioni.php');
    		ini_set('display_errors','Off');
    		$db=connection_pgsql() or die('Connessione al DBMS non riuscita');
    
    
    		$data = file_get_contents($_FILES['form_data']['tmp_name']);
    		$escaped = pg_escape_bytea($data);
    		$result = pg_prepare( "ins_pic",'INSERT INTO salute.prova2 (a) VALUES ($1)'); 
    		$result = pg_execute ("ins_pic",array('$escaped')); 
    		
    	}
    ?>
    Il pdf in effetti viene caricato (in formato bytea) nella tabella postgresql.

    Vorrei sapere ora come gestire il download della pdf appena caricato.

    Se qualcuno riesce a darmi una mano lo ringrazio in anticipo
    PS: non ho troppo ben capito i metodi php pg_lo_*, all'inizio pensavo di utilizzare questi ma poi ho trovato in un altro sito il pg_escape_bytea che funzionava.

  2. #2
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Se fai una select e metti il contenuto del campo con il file in una variabile riesci a visualizzare il PDF dichiarando i corretti header nello script? Una cosa tipo
    Codice PHP:
    header('Content-type: application/pdf');
    echo 
    $variabile_che_contiene_i_dati_del_campo 

  3. #3
    Quote Originariamente inviata da clasku Visualizza il messaggio
    Se fai una select e metti il contenuto del campo con il file in una variabile riesci a visualizzare il PDF dichiarando i corretti header nello script? Una cosa tipo
    Codice PHP:
    header('Content-type: application/pdf');
    echo 
    $variabile_che_contiene_i_dati_del_campo 

    ho fatto così
    codice:
    $sql= "SELECT a FROM schema.tab WHERE id=5";
    
    $resource=pg_query($db, $sql);
    $row=pg_fetch_array($resource, NULL, PGSQL_BOTH);
    
    
    $data = pg_unescape_bytea($row[0]);
    $extension ='pdf';
    $fileId = 'title';
    
    
    $filename = $fileId . '.' . $extension;
    
    
    $fileHandle = fopen($filename, 'w');
    fwrite($fileHandle, $data);
    fclose($fileHandle);
    
    header('Content-type: application/pdf');
    header('Content-Disposition: attachment; filename="downloaded.pdf"');
    echo $fileHandle;
    exit;
    Ma ancora non funziona

  4. #4
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    devi stampare lo stream, non il file

    Codice PHP:
    header('Content-type: application/pdf');
    header('Content-Disposition: attachment; filename="downloaded.pdf"');
    echo 
    $data

  5. #5
    Quote Originariamente inviata da clasku Visualizza il messaggio
    devi stampare lo stream, non il file

    Codice PHP:
    header('Content-type: application/pdf');
    header('Content-Disposition: attachment; filename="downloaded.pdf"');
    echo 
    $data
    grazie mille.
    un ultima informazione, se volessi al posto di farlo scaricare, farlo aprire nel browser sarebbe molto diversi e complicato?

  6. #6
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    credo basti eliminare questo
    header('Content-Disposition: attachment; filename="downloaded.pdf"');

  7. #7
    Quote Originariamente inviata da clasku Visualizza il messaggio
    credo basti eliminare questo
    header('Content-Disposition: attachment; filename="downloaded.pdf"');
    così però quando provo a salvarlo me lo salva come index.php, c'è un modo per dare un nome di default al pdf?

  8. #8
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    prova se così funziona
    Codice PHP:
    header('Content-Disposition: inline; filename="downloaded.pdf"'); 

  9. #9
    Quote Originariamente inviata da clasku Visualizza il messaggio
    prova se così funziona
    Codice PHP:
    header('Content-Disposition: inline; filename="downloaded.pdf"'); 
    no, me lo apre ancora nel browser ma quando provo a salvarlo mi suggerisce il nome del frame.php

  10. #10
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    mah, a me funziona correttamente (testato con Firefox)
    controlla che valorizzi tutto correttamente analizzando gli header della pagina output

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.