Mozilla Firefox不正确地从MySQL数据库下载某些文件types

我有一个MySQL数据库,我存储各种文件types。 如果文件扩展名是标准的三字符(.doc,.xls,.pdf),那么内容types存储为application / msword,application / ms-excel,application / pdf等。如果是.docx或.xlsx ,那么内容types是application / vnd.openxmlformats-officedocument。

直到最近,这从来没有成为一个问题,但在过去的几周内,它成为了Firefox的一个问题。 Firefox不会以正确的格式下载types为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; } 

这在除Firefox以外的每个浏览器都能正常工作,正如我所说,这是一个最近的问题。 我的用户在过去几周内开始报告。 我可以修改我的代码或我的数据库,以确保FF再次正确下载这些文件types?

而且,如果文件名中有空格,那么Firefox只会读取其中的第一个单词,这就是文件的保存方式。“


在file upload并input到数据库之前,最好能够立即解决问题,然后用下划线replace空格,然后让PHP完成它的工作。

考虑以下是我用于上传文件的逻辑,这将会转换:

This is a line

成:

This_is_a_line

 <?php $string = "This is a line"; $arr = explode(" ",$string); $string = implode("_",$arr); echo $string; ?> 

这取决于我自己的经验,解决了同样的问题。