2013-04-14 251 views
2

我使用下面的代碼來下載文件,該工作很好,但問題在於文件擴展名缺失,即使在壓力下載之後。我曾嘗試將其更改爲其他MIME類型,可能是什麼問題以及我如何解決它?從頭文件下載時缺少文件擴展名

header('Content-Type: audio/mp3'); 
header("Content-Disposition: attachment; filename=$row[3]"); 
header("Content-Length: ".filesize("$row[1]$row[2]")); 
$fp = fopen("$row[1]$row[2]", "r"); 
fpassthru($fp); 
fclose($fp); 

注意:$ row數組中的值很好。

回答

2

在這裏黑暗只是一個鏡頭,這可能是因爲文件名中有一個空間?在這種情況下,您可以嘗試在文件名周圍添加雙引號,有關空白被省略後的部分的報告(例如:http://kb.mozillazine.org/Filenames_with_spaces_are_truncated_upon_download

編輯:如註釋中所述,標題未返回擴展名,因此在後端手動添加.mp3擴展可解決此問題。

+0

整個名稱被加載,用空格例如:「我的新組合」缺少」 .MP3" 。只是出於好奇,在什麼地方擴展名來自MIME類型還是來自實際文件名,並且可以通過Apache設置阻止它? –

+0

我不完全知道你的意思,但是你可以嘗試檢查'client'使用的是什麼使用Firbug插件的Firefox。打開Firebug並檢查返回的內容標題(點擊F12打開Firebug並檢查'Net'標籤) - > https://dl.dropboxusercontent.com/u/11837707/stackoverflow/headers。 jpg – Toverbal

+0

好吧,這是什麼我得到了,我從我的數據庫中下載了一個ID爲19的文件,這是第二個請求,它下載文件名'enth nd ...「https://www.dropbox.com/s/ bpz1wx9gfl96sih/file%20type.png –

0

你可以嘗試將周圍的文件名這樣的轉義引號:

header("Content-Disposition: attachment; filename=\"$row[3]\""); 
+0

:(不工作。 –

0
對帕特里克的答案

升技修改

header("Content-Disposition: attachment; filename="."\"{$fname}\"");