显示文件时Content-Type设置不正确

时间:2016-12-25 01:46:25

标签: php jquery file mime-types content-type

我有一台服务器,可以从CRM提供文件内容。我正在使用fancybox来显示文件内容。以下是代码 -

JQuery代码 -

$url = 'https://docs.google.com/viewer?url=<server-url>/filename.php?id='+$documentId+'&name='+$name+'&embedded=true';
$.fancybox.open({
            padding: 0,
            href: $url,
            type: 'iframe',
        });

现在在服务器端,我的PHP代码是 -

public function _func_getFile($docId, $fileName, $download){
        $data = null;
        $contentTypeMap = array('doc' => 'application/msword', 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'pdf' => 'application/pdf', 'jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'png' => 'image/png');
        if($this->getConnectedToAPI()){
            $data = <CRM serves file data here>
            if($download){
                header('Content-disposition: attachment; filename='.$fileName);
            }else{
                header('Content-disposition: inline; filename='.$fileName);
            }
            $extn = trim(strtolower(array_pop(explode(".", $fileName))));
            header('Content-type: '.$contentTypeMap[$extn]);
            echo $data;
        }
    }

现在的问题是,当我尝试获取.doc文件或.pdf文件时,它不会在fancybox中正确显示文件。 Google文档查看器会显示如下错误 - enter image description here

或者有时我将doc文件看作纯文本文件,没有格式化(XML负责格式化,这是我的猜测)。但是,如果我将pdf的Content-type设置为application / msword,它在所有情况下都适用于pdf。但对于doc,同样的问题仍然存在。

有人可以指出我哪里出错吗?我的猜测是,根据文件的扩展名没有正确设置Content-Type有什么问题。

PS - 我可以正确下载所有文件类型。使用此代码下载任何类型的文件都没有问题。

0 个答案:

没有答案