2013-06-24 18 views
7

Ho un collegamento che punta a un file musicale sul mio sito, ora il nome del file è stato sottoposto a hashing al momento del caricamento, quindi desidero utilizzare il nome file originale che ho memorizzato nel mio database , Ho fatto qualche ricerca e ho trovato questo nuovo attributo 'download' per il tag 'a' ma funziona solo nelle versioni successive di firefox e chrome, non funziona in ie e inoltre non funziona con il download manager che utilizzo così ho controllato online e ho scoperto le intestazioni che ho poi implementato. Ora il nome file è cambiato, ma il file musicale continua a essere salvato come file '11 .35kb ', indipendentemente dal file musicale che provo a scaricare. Questo è il mio codice:Ridenominazione del file di download utilizzando l'intestazione in PHP

if (isset($_REQUEST['download'])) 
    { 
     $download_id = $_REQUEST['download']; 

     $db = new MysqliDatabase(ConnectionString); 
     $result = array(); 
     $result = $db->query_one("SELECT TrackID, ma.ArtisteName, FeaturedArtistes, 
            mc.Category, TrackName 
            FROM `musictracks` mt 

            LEFT JOIN `musiccategories` mc 
            ON mt.CategoryID = mc.CategoryID 

            LEFT JOIN `musicartistes` ma 
            ON mt.ArtisteID = ma.ArtisteID 

            WHERE mt.TrackID = '$download_id';"); 

     $filename = $result->TrackPath; 
     $outputfilename = $result->ArtisteName . ' ft. ' . $result->FeaturedArtistes . ' - ' . $result->TrackName . '.mp3'; 

     header("Content-Type: audio/mpeg"); 
     header("Content-Disposition: attachment; filename=\"" . basename($outputfilename) . "\";"); 
     header("Content-Transfer-Encoding: binary"); 
     readfile("$filename"); 
    } 

E questo è il link per il download:

<a href="<?php echo 'musicdownload.php?download='. $row->TrackID ?>" ><img src="images/download.png" alt="download" title="download" width="14" height="14" /></a> 
+0

Che cosa contiene il file 11.35kb? –

+0

Metti un file mp3 sul server e prova a scaricarlo direttamente - forse c'è qualche problema con il server. E controlla il tuo '$ nomefile' - forse non è quello che ti aspetti. – furas

+0

Viene salvato come file musicale ma quando provo a riprodurlo non funziona. –

risposta

4

mio PHP è un po 'arrugginito ma posso pensare a una cosa con il tuo codice, senza intestazione lunghezza del contenuto. Aggiornare il codice per questo e vedere se funziona:

if (isset($_REQUEST['download'])) { 
    { 
    $download_id = $_REQUEST['download']; 

    // ... 

    $filename = $result->TrackPath; 
    $outputfilename = $result->ArtisteName . ' ft. ' . $result->FeaturedArtistes . ' - ' . $result->TrackName . '.mp3'; 

    if (file_exists($filename)) { 
     header("Content-Type: audio/mpeg"); 
     header("Content-Disposition: attachment; filename=\"" . basename($outputfilename) . "\";"); 
     header("Content-Transfer-Encoding: binary"); 

     header('Content-Length: ' . filesize($filename)); 
     ob_clean(); 
     flush(); 
     readfile($filename); 
     exit; 
    } 
    } 
} 

Nota che usiamo flush(); per inviare le intestazioni al browser prima di iniziare il download vero e proprio. E ho anche aggiunto un if (file_exists($filename)) per assicurarci di avere un file da inviare. Mi consiglia di mettere una clausola altro lì per dare qualcosa che vi mostrerà se non si dispone di un file come ci si aspetta ...

+0

ottimo. funziona bene. il codice è pulito. –

0

header("Content-Type: application/force-download"); header("Content-Type:audio/mpeg"); header("Content-Type: application/download");; header("Content-Disposition: attachment;filename=".$file_name);

0

Si prega di scaricare i file mp3 utilizzando ricciolo

Ecco il codice di esempio per il vostro riferimento

<?php 

if(isset($_REQUEST['inputurl']) && $_REQUEST['inputurl']!="") { 

$file = $_REQUEST['inputurl']; 

header("Content-type: application/x-file-to-save"); 
header("Content-Disposition: attachment; filename=".basename($file)); 
readfile($file); 

} 

?> 

<form name="from" method="post" action=""> 
<input name="inputurl" type="text" id="inputurl" value="" /> 
<input type="submit" name="Button1" value="Get File" id="Button1" /> 
</form> 

può essere che vi aiuterà.

Problemi correlati