我有一台服务器,可以从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文档查看器会显示如下错误 -
或者有时我将doc文件看作纯文本文件,没有格式化(XML负责格式化,这是我的猜测)。但是,如果我将pdf的Content-type设置为application / msword,它在所有情况下都适用于pdf。但对于doc,同样的问题仍然存在。
有人可以指出我哪里出错吗?我的猜测是,根据文件的扩展名没有正确设置Content-Type有什么问题。
PS - 我可以正确下载所有文件类型。使用此代码下载任何类型的文件都没有问题。