Mozilla Firefox无法从MySQL数据库正确下载某些文件类型

时间:2013-11-01 18:26:58

标签: php mysql excel firefox

我有一个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再次正确下载这些文件类型吗?

1 个答案:

答案 0 :(得分:2)

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


最好立即抓住问题(在文件上传并输入数据库之前)并用下划线替换空格,然后让PHP做完事情。

考虑以下哪个是我上传文件使用的逻辑,它将转换:

This is a line

成:

This_is_a_line

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

这取决于我自己对解决它的同一问题的经验。