我有一個MySQL數據庫,用於存儲各種文件類型。如果文件擴展名是標準的三字符(.doc,.xls,.pdf),那麼內容類型存儲爲application/msword,application/ms-excel,application/pdf等。如果它是.docx或.xlsx ,那麼內容類型是application/vnd.openxmlformats-officedocument。Mozilla Firefox未正確從MySQL數據庫下載某些文件類型
直到最近,這從來都不是問題,但在過去的幾周內,它已成爲Firefox中的一個問題。 Firefox不會以正確的格式下載類型爲application/vnd.openxlmformats-officedocument的文件。相反,它會下載沒有擴展名的文件,用戶必須手動添加它。此外,如果文件名中有空格,那麼Firefox只會提取其中的第一個單詞,這就是文件的保存方式。
這裏是我用來上傳文件的代碼:
if($_FILES['Budget']['size'] > 0)
{
$fileName = $_FILES['Budget']['name'];
$tmpName = $_FILES['Budget']['tmp_name'];
$fileSize = $_FILES['Budget']['size'];
$fileType = $_FILES['Budget']['type'];
$fp = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
fclose($fp);
$fileUp = $con->prepare("INSERT INTO ptfs.upload (ProposalNo, name, size, type, content) VALUES(:proposalno,:name,:size,:type,:content)");
$fileData=array('proposalno'=>$proposalNo,'name'=>$fileName,'size'=>$fileSize,'type'=>$fileType,'content'=>$content);
$fileUp->execute($fileData);
}
這裏是呈現文件鏈接到用戶代碼:
if(isset($_GET['ProposalNo']) && isset($_GET['UID']))
{
$fileget = $con->prepare("SELECT name, type, size, content FROM upload WHERE ProposalNo = :proposalno AND UID = :uid");
$data = array('proposalno'=>$_GET['ProposalNo'],'uid'=>$_GET['UID']);
$fileget->execute($data);
list($name, $type, $size, $content) = $fileget->fetch(PDO::FETCH_BOTH);
header("Content-Disposition: attachment; filename=$name");
header("Content-type: $type");
header("Content-length: $size");
echo $content;
exit;
}
這除了火狐每個瀏覽器工作正常,正如我所說,這是一個最近的問題。我的用戶在最近幾周內開始報告它。我可以修改我的代碼或我的數據庫,以確保FF再次正確下載這些文件類型?
帶名稱空格的文件應該用引號輸入到內容頭中:'Content -.....; filename =「file with spaces.txt」' –
最好立即解決問題(*文件上傳並輸入到數據庫*之前),並用空格替換空格,然後讓PHP完成它的任務。這就是我所做的事情,從此以後從未讓我失望。 –