JS/PHP -无法从Base64编码字符串生成可读的ppt (PPTX)文件



下面的PHP代码是从我之前编写的AngularJS/PHP应用程序中重新使用的,用于成功下载PHP生成的PowerPoint文件。

下面的JS代码是用ReactJS编写的,当调用它来读取JSON(包含在变量result中)并从api请求中检索到PHP文件生成器函数时。当我打开PowerPoint文件时,它已经损坏了。它只包含一个数字的。txt(扩展名我改变我的文件检查内容)版本的PowerPoint文件。它应该有原始的二进制内容。

我怀疑我的文件不包含正确解码的内容。我如何正确地执行解码和构造文件。

我创建了以下两段代码来输出文件内容和检索文件内容。不幸的是,JS代码中文件内容的检索会产生一个损坏的文件,该文件具有一系列个位数

0753420020807097134859119432551731005080019000916711111011610111011…继续

中的.txt格式,而不是像

下面开头的文本那样的二进制格式。PK ‡i„U[Âÿ­ 2  [Content_Types].xmlµUKoÛ0 ¾çWº±Ò†¡ˆÓÃÚžö(Ðö h6í¨Õ

PHP

public function generateRiskSummaryPresentation()
{
//header("Content-Type: application/vnd.openxmlformats-officedocument.presentationml.presentation; charset=utf-8");
header("charset=utf8");
//header("Content-Disposition: attachment; filename=RiskSummary.pptx");
ob_start();
$oWriterPPTX = IOFactory::createWriter($this->riskPPT,'PowerPoint2007');
$oWriterPPTX->save("php://output");  
$presentationContent = ob_get_contents();
ob_end_clean();  
return base64_encode($presentationContent);                                      
}

JS

getRiskReport = (riskid) => {
const requestOptions = {
method: 'GET',
mode: 'cors',
headers: {'Content-Type': 'application/json' }
};        
return fetch("http://riskaim/api/riskreport/"+riskid, requestOptions)     
.then(res => res.json())
.then(result => {
let content = Buffer.from(result.data, 'base64');
let file = new Blob([...content], {type: 'application/vnd.openxmlformats-officedocument.presentationml.presentation', charset: 'utf-8'});
let downloadLink = document.createElement("a");
downloadLink.setAttribute('style', 'display: none');
downloadLink.setAttribute('href', window.URL.createObjectURL(file));
downloadLink.setAttribute('target', '_blank');
downloadLink.setAttribute('downloadLink', 'RiskSummary.pptx');
downloadLink.click();
});
} 

如何生成原始内容?

Buffer.from(result.data, 'base64')之后去掉.toString(),用[new Uint8Array(content)]代替[content],结果输出成功!

let content = Buffer.from(result.data, 'base64');
let file = new Blob([new Uint8Array(content)], {type: 'application/vnd.openxmlformats-officedocument.presentationml.presentation', charset: 'utf-8'});

相关内容

  • 没有找到相关文章

最新更新