Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883

    Upload file pdf e salvataggio in un db mysql

    Sto cercando di fare l'upload di un file pdf e di inserirlo in un db mysql
    Nel db mysql ho definito un dato di tipo longblob per ospitare il file pdf (sono file da 50k circa)
    Il codice del form html è questo:

    codice:
    <form action="event_upload_action.php" method="post" enctype="multipart/form-data">
      <table border="0" cellpadding="5" cellspacing="2">
        <tr>
          <td colspan="3" style="font-size: 14px">Aggiungi evento</td>	
        </tr>
        <tr>
          <td>
               <input type="file" name="upfile">
               <input type="submit" value="Invia evento">
          </td>
        </tr>
      </table>
    </form>
    Il codice che uso per inserire il file nel db mysql è questo:

    codice:
    $file = ($_FILES['upfile']['tmp_name']); 
    
    if(@is_uploaded_file($file)) 
      {   
     
      include("../db_config.php");
    
      $db = mysql_connect($db_host, $db_user, $db_password);  
      
        
      $query = " INSERT INTO evento
                                (programma, data_inserimento)
                                VALUES
                                ('$file', now())";
      
      $result = mysql_query($query, $db) or die("<hr>$query
    
    ".mysql_error()); 
                
      echo "L'upload del file " . $_FILES["upfile"]["name"] . " è avvenuto correttamente";
    
      }
    Una volta effettuato l'upload apro il db mysql con lo strumento di amministratore e vedo che i dati sono stati inseriti
    Sempre dal tool di amministratore di mysql premo sull'icona "salva" presente accanto al campo longblob e salvo il file pdf sul desktop
    Purtroppo le dimensione del file sono pochi byte e se provo ad aprirlo mi dice che il file è illeggibile

    Sbaglio qualcosa nella fase di inserimento nel db del file pdf ?

  2. #2
    :master:
    Il campo BLOB salva il file nel DB come file binario.
    Provato a ricordificarlo come PDF al momento di estrarlo?

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    quando salvo il file dovrò anche codificarlo da pdf a file binario immagino, no?

    come si fa a codificare e decodificare ?

  4. #4
    Io per evitare scocciature salvo sempre il file in una cartella ed il solo nome in un campo text della tabella.
    Non mi sono mai incontrato a programmare un decode da binario a JPG o PDF.
    Credo che una volta estrapolato il file in binario, vada lanciato nel browser sfruttando gli opportuni header. Per fare questo, però, suppongo ti sia necessario salvare nella tabella anche il tipo MIME del file, definito con--------------
    Codice PHP:
    $tipo $_FILES['upfile']['type']; 
    Un piccolo esempio--------------
    Codice PHP:
    <?php
    $sql 
    "SELECT tipo, file FROM tabella WHERE id = $id ";
    $query mysql_query($sql);

    $fetch mysql_fetch_array($query);
    $tipo $fetch['tipo'];
    $file $fetch['file'];

    // output di PDF in una pagina
    header('Content-type: $tipo');
    echo 
    $file;

    /* 
    così invece fai in modo che venga scaricato
    dopo la visualizzazione del classico prompt di 
    download
    */
    header('Content-Disposition: attachment; filename="$file" ');
    ?>
    Per concludere.
    Capisco che il DB sia programmato per gestire anche questo tipo di campi, ma non ne vedo l'utilità per un progetto web, mentre ne vedo nel caso di un progetto desktop che si interfaccia con un DB.

    Qualunque sia il metodo che sceglierai.... spero di esserti stato d'aiuto.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    ho scelto anche io la soluzione di salvare il path nel dd ed il file in una directory ma ho questo problema

    quando salvo il file in una directory uso questa stringa di codice:

    codice:
    $target_path = "c:\prova\" . basename( $_FILES['upfile']['name']);
    
    @move_uploaded_file($_FILES["upfile"]["tmp_name"], $target_path) 
            or die("Impossibile spostare il file.");
    se provo ad aprire il file, le dimensioni sono corrette ma il file risulta corrotto (ho provato con vari tipi di file)

    dove sbaglio?

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    per risolvere il problema potrei provare ad utilizzare una funzione diversa da move_uploaded_file, qualche suggerimento?

  7. #7
    Puoi provare ad usare copy(), ma il concetto è lo stesso e a me sembra che il tuo codice sia corretto.

    Comunque.... prima di mollare, fai una prova così:

    Codice PHP:
    $target "c:/cartella/di/salvataggio/"
    $file $_FILES['upfile']['name']; // mi raccomando: apice singolo per gli array
    $file_tmp $_FILES['upfile']['tmp_name']; // mi raccomando: apice singolo per gli array

    if (move_uploaded_file($file_tmp"$target/$file")) {
    echo 
    "File [$file_tmp] salvato correttamente nella directory [$target] con il nome di [$file]";
    } else {
    echo 
    "Errore nel salvataggio.

    File TMP [
    $file_tmp

    Directory [
    $target]

    Nome File [
    $file]";

    Vedi quali errori ti restituisce e poi semmai posta di nuovo
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    non dà nessun errore ma ho scoperto il problema
    nella fase di upload il php si appoggia ad una cartella temporanea, questa cartella cambia i diritti del file e li rende inaccessibili

    la soluzione che ho trovato io è specificare nel file php.ini una directory temporanea dove ho tutti i diritti (777)

  9. #9
    Bravo!!!!!
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

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.