我有一个 MySQL 数据库,用于存储各种文件类型。如果文件扩展名是标准的三个字符(.doc、.xls、.pdf),则内容类型存储为 application/msword、application/ms-excel、application/pdf 等。如果是 .docx 或 .xlsx ,则内容类型为 application/vnd.openxmlformats-officedocument。
直到最近,这从来都不是问题,但在过去几周内,它已成为 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;
}
这在除 Firefox 之外的所有浏览器中都可以正常工作,正如我所说,这是一个最近的问题。我的用户在过去几周内开始报告它。我可以修改我的代码或数据库以确保 FF 再次正确下载这些文件类型吗?