下載文件我想下載的音響/ MPEG MIME類型,而不是右擊,然後保存爲鏈接遠程 MP3文件。我試着用php頭修改頭文件內容類型,然後用readfile()調用文件。這工作得很好,但由於readfile()命令文件出來我的服務器帶寬。是否有另一種方法來改變標題而不需要帶寬成本?我可以定義瀏覽器如何處理與JavaScript的內容類型?有誰有同樣的問題?音頻/ MPEG MIME類型
在此先感謝。
下載文件我想下載的音響/ MPEG MIME類型,而不是右擊,然後保存爲鏈接遠程 MP3文件。我試着用php頭修改頭文件內容類型,然後用readfile()調用文件。這工作得很好,但由於readfile()命令文件出來我的服務器帶寬。是否有另一種方法來改變標題而不需要帶寬成本?我可以定義瀏覽器如何處理與JavaScript的內容類型?有誰有同樣的問題?音頻/ MPEG MIME類型
在此先感謝。
通過使用mime type audio/mpeg,您可以告訴瀏覽器「使用此文件執行默認操作」。例如,如果您有一個jpg文件並將mime類型設置爲image/jpeg,則瀏覽器將讀取jpg並將其顯示在瀏覽器窗口中。
解決方案是使用MIME類型的應用程序/數據。這將下載離開瀏覽器的文件。
這將是
header("Content-type: application/data");
== ==更新
一個更完整的方法
header("Content-type: application/data");
header("Content-Disposition: attachment; filename=$this->filename");
header("Content-Description: PHP Generated Data");
readfile($this->file);
如果你想有一個動態的MIME類型的讀者,你可以使用這個
$type = $this->get_mime_type($this->filename);
header("Content-type: " . $type);
...
private function get_mime_type($filename) {
$fileext = substr(strrchr($filename, '.'), 1);
if (empty($fileext)) {
return (false);
}
$regex = "/^([\w\+\-\.\/]+)\s+(\w+\s)*($fileext)/i";
$lines = file("mime.types", FILE_IGNORE_NEW_LINES);
foreach ($lines as $line) {
if (substr($line, 0, 1) == '#') {
continue; // skip comments
}
if (!preg_match($regex, $line, $matches)) {
continue; // no match to the extension
}
return ($matches[1]);
}
return ("application/data"); // no match at all, revert to something that will work
}
而且,要獲取MIME類型列表,您可以檢查我的實驗版本,保存顯示的內容並將其保存到網站根目錄中名爲mime.types的文件中。
http://www.trikks.com/lab/mime.html
玩得開心
所有這一切導致瀏覽器不知道它是什麼類型的文件,所以雖然它會強制下載框,它不是強制下載的正確方法。使用'Content-Disposition:'標題代替... – DaveRandom
同意,內容處置與附件也是必要的,但我認爲這是一個給定的。添加標題也很好(「Content-Description:PHP生成的數據」); –
唯一的問題是因爲這些文件是遠程文件,我不能直接修改標題,我只能修改它們,正如我的問題所述,但是感謝您清理我的混淆頭文件和MIME類型 –
我認爲你需要做的是這樣的:
$pathOfAudioFile = '/path/to/my/file.mp3';
header('Content-Type: audio/mpeg');
header('Content-Length: '.filesize($pathOfAudioFile));
// This next line forces a download so you don't have to right click...
header('Content-Disposition: attachment; filename="'.basename($pathOfAudioFile).'"');
readfile($pathOfAudioFile);
使用Content-Disposition: attachment...
強制下載框出現,而不必點擊右鍵 - >另存目標如。
但這將會出現我的服務器帶寬與讀取文件不是嗎? –
它會,但是如何在不使用服務器帶寬的情況下下載文件?你不能在沒有使用帶寬的情況下傳輸數據......你想如何避免這種情況? – DaveRandom
即時嘗試下載的文件是第三方網站上的遠程文件,所以我想避免我的服務器將這些文件下載到我的服務器,然後將其上傳到我的客戶端。 –
你能澄清你想從哪裏下載嗎?這些文件是否位於第三方服務器上? –
是的,這是正確的文件是在第三方網站,例如我不能直接修改頭文件 –