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

    Doenload xls da campo Blob in MySql

    Ciao a tutti,
    ho un db Mysql su cui carico dei file in un campo mediumblob.
    Finchè carico dei pdf tutto ok.
    Quando carico dei files xls o xlsx mi crea un problema il doenload.
    In pratica quando l'utente mi scarica il file Excel mi da l'errore "Il formato e l'estensione di 'nomefile.xls' non corrispondono. Il file potrebbe essere danneggiato...."

    Mi sapreste dire come gestire i file xls?
    Non capisco dove sbaglio.

    Grazie

  2. #2
    Se scarico il file con access lo vedo correttamente per cui il problema sembra essere PHP

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,508
    Mostra il codice che usi per il download, altrimenti non possiamo dirti dove sbagli.
    Ad intuito potrebbe essere che specifichi un errato content-type.

    Comunque, se puoi, rivedi il sistema di salvataggio dei file, meglio mettere i file in una cartella piuttosto che direttamente dentro il database, nel db ci dovresti mettere solo il nome del file e se serve il percorso dove trovarlo.

  4. #4
    Ecco:

    $idfile=$_GET['dintPkId'];
    $result = $myconn->query('SELECT intPkId,intBidId,strName,binFile FROM tblDocuments WHERE intPkId = "'.$idfile.'"') or die("Errore...query" . mysqli_error($result));
    $tmp = mysqli_fetch_array($result);
    $filename=$tmp['strName'];

    //Gather relevent info about file
    $len = $tmp['binFile'];
    $name = $tmp['strName'];
    $ext = strtolower(substr(strrchr($name,"."),1));

    //This will set the appropriate Content-Type
    switch( $ext ) {
    case "pdf": $ctype="application/pdf"; break;
    case "exe": $ctype="application/octet-stream"; break;
    case "zip": $ctype="application/zip"; break;
    case "doc": $ctype="application/msword"; break;
    case "xls": $ctype="application/vnd.ms-excel"; break;
    case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
    case "gif": $ctype="image/gif"; break;
    case "png": $ctype="image/png"; break;
    case "jpeg":
    case "jpg": $ctype="image/jpg"; break;
    case "mp3": $ctype="audio/mpeg"; break;
    case "wav": $ctype="audio/x-wav"; break;
    case "mpeg":
    case "mpg":
    case "mpe": $ctype="video/mpeg"; break;
    case "mov": $ctype="video/quicktime"; break;
    case "avi": $ctype="video/x-msvideo"; break;

    //Following are extensions that shouldn't be downloaded
    case "php":
    case "htm":
    case "html":
    case "txt": die("Cannot be used for ". $ext ." files!");
    break;

    default: $ctype="application/force-download";
    }

    //Begin writing headers
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate,
    post-check=0, pre-check=0");
    header("Cache-Control: public");
    header("Content-Description: File Transfer");

    //Use the switch-generated Content-Type
    header("Content-Type: $ctype");

    //Force the download
    $header="Content-Disposition:attachment;filename=".$name;
    header($header );
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".$len);
    @readfile($file);
    exit;


    //Function call
    $file =$_REQUEST['file'];
    download_file($file);

  5. #5
    Voi quindi consigliate di tenere i file in una cartella separata?
    Così funziona ma vorrei capire quale sia la soluzione migliore.

  6. #6
    In ogni caso mi da:

    Xls.jpg
    Ultima modifica di Andrew_de_moray; 13-10-2016 a 14:26

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.